2 Důležité návrhové vzory selenu a osvědčené postupy

V tomto tutoriálu se dozvíme o vzorových vzorcích a osvědčených postupech selenu při práci s vývojem rámce Selenium Automation (hybridní rámec v selenu), musíme vzít v úvahu dvě varianty Framework Design nebo Framework model, které jsou: 

Potřebujeme vědět a rozumět tomu, proč je při vývoji našeho jazyka vyžadován návrhový vzor jazyka rámec v jednom ze selenu rámcový model. Doporučujeme projít si předchozí části Série výukových programů pro vývoj Selenium Framework získat celé porozumění.

Pochopme to podrobně: 

selenové návrhové vzory a osvědčené postupy -hybridní rámec v selenu

Při navrhování libovolného rámce musíme vzít v úvahu určitou designovou architekturu, tj. Vzory návrhu selenu a osvědčené postupy, a podle potřeby typu modelu rámce musíme vybrat jazyk Návrhový vzor vyřešit problémový stav návrhu rámce jako celku.

Proto jen na závěr, můžeme si vybrat rámcový model Selenium (Hybrid, Model objektu stránky, Data Driven atd.), ale k implementaci modelu musíme následovat a implementovat nějaký jazykový návrhový vzor (např. návrhové vzory java/C#) 

Proč potřebujeme vzor selenu a osvědčené postupy při vytváření rámce selenu: 

Jaké návrhové vzory, které mají být použity v Selenium Framework: 

Existuje několik návrhových vzorů, které můžete použít k implementaci různých oblastí rámce, například příklad: 

V nadcházejících příspěvcích zde provedeme šablonu živého kódování celého rámce.

Vzor návrhu Singleton pro hybridní framework v selenu: 

Singleton Design Pattern je vzor, ​​ve kterém můžete vytvořit pouze jeden objekt z třídy a použít stejný objekt pro přístup k metodám třídy; mohli bychom použít návrhový vzor v konfigurátoru, kde potřebujeme pouze načíst konfigurační data a můžeme je načíst do nějakého datového úložiště (jakýkoli druh datové struktury, kterou můžete použít podle potřeby a kdykoli při provádění z libovolných tříd a metod) 

Stejným způsobem bychom tedy mohli dosáhnout při navrhování stejného vzoru se vzorem Singleton Design. 

POZNÁMKA: V nadcházející části série tutoriálů navrhneme a vyvineme framework úplně od začátku, ale tento konkrétní tutoriál vám poskytne vhled do nutnosti návrhového vzoru.

balíček com.cyborg.core.generic.dataUtils; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.LinkedHashMap; import java.util.Properties; import java.util.Set; import org.apache.log4j.PropertyConfigurator; // Toto je třída SingleTon public class PropertiesDataUtils { private Properties properties = null; veřejná statická LinkedHashMap configDataStore = nová LinkedHashMap (); InputStream je = null; // Toto je statická a soukromá reference třídy, kterou byste mohli použít kdekoli ve vašem frameworku private static PropertiesDataUtils propertiesDataUtils = null; boolean centralizeLog = false; // Toto je soukromý konstruktor pro vytvoření objektu, ale nemůžete k němu přistupovat zvenčí třídy, abyste zachovali návrh vzoru SingleTon, tj. vytvoření pouze jednoho objektu.
 private PropertiesDataUtils(String cesta k souboru) { createDataStore(filePath); centralizeLog = Boolean.parseBoolean(PropertiesDataUtils.configDataStore.get("centralizedLog")); if(centralizeLog) PropertyConfigurator.configure(System.getProperty("user.dir")+"//src//test//resources//config//log4j_central.properties"); else PropertyConfigurator.configure(System.getProperty("user.dir")+"//src//test//resources//config//log4j_local.properties"); } private PropertiesDataUtils() { } // Tato metoda v podstatě vytvoří instanci třídy SingleTon public static PropertiesDataUtils getInstance(String filePath) { if (propertiesDataUtils == null) propertiesDataUtils = new PropertiesDataUtils(filePath); return propertiesDataUtils; } // tato metoda v podstatě vytvoří datové úložiště, kam chcete uložit všechna konfigurační data, jak bylo popsáno dříve private void generationDataStore(String filePath) { try { this.properties = new Properties(); is=new FileInputStream(filePath); vlastnosti.zatížení(je); overrideFromEnvironment(); Soubor klíče = loadAllKeys(); for (Object k : keys) { String key = (String) k; configDataStore.put(klíč, getPropertyValue(klíč)); } } catch (FileNotFoundException fileNotFoundException) { String exceptionData = String.valueOf(fileNotFoundException.getCause().getMessage()); } catch (IOException ioException) { String exceptionData = String.valueOf(ioException.getCause().getMessage()); } nakonec { if (null != is) { try { is.close(); } catch (Výjimka e) { String exceptionData = String.valueOf(e.getCause().getMessage()); } } } } // Tato metoda se používá k načtení všech klíčů ze souboru vlastností.

Tímto přístupem bychom mohli použít návrhový vzor Singleton a použít ho v našem rámci.

Tovární vzor v selenovém rámci: 

V továrním návrhovém vzoru vytvoříme třídu (nazýváme ji tovární třídou) a na druhou stranu jednu máme rozhraní a případně implementováno „n“ počtem tříd.

Tovární třída v zásadě vrací objekt výše uvedených tříd (v závislosti na potřebě), takže s výše uvedeným nemusíte jednat „N“ počet objektů tříd; spíše můžete vytvořit jeden objekt třídy Factory a zavolat metodu třídy Factory, která vrátí požadovaný základní objekt pro požadované třídy mezi třídami adobe „n“.

Nyní tento návrh můžete vzít v úvahu při vytváření různých implementací Webdriver / prohlížeč. 

Máme různé prohlížeč a implementace s jiným typem Selenium ovladač (např. LocalDriver, RemoteDriver, ThreadDriver atd.) a pokud požadujete konkrétní typ ovladače a konkrétní typ prohlížeče, můžete uvést v konfiguračním souboru a na základě potřeby vám tovární třída poskytne instanci ovladač a prohlížeč pro váš automatizační skript k dalšímu použití. 

Tady je kódová základna pro implementaci tohoto návrhového vzoru při vytváření interakcí mezi ovladačem a prohlížečem: 

Návrh rozhraní: 

balíček com.cyborg.core.web.utils.driverUtils; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.RemoteWebDriver; public interface IDriver { public WebDriver init(String browserName); }

„N“ počet implementací tříd procházení (kteří implementují rozhraní):

balíček com.cyborg.core.web.utils.driverUtils;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.safari.SafariDriver;
public class LocalDriver implementuje IDriver {
   public WebDriver init(String browserName) {
       String pathToDriver = getDriverPath(browserName);
       if (null != název prohlížeče) {
           switch (browserName) {
               pouzdro "chrome":
                   System.setProperty("webdriver.chrome.driver",
                           pathToDriver);
                   vrátit nový ChromeDriver();
               případ "firefox":
                   System.setProperty("webdriver.gecko.driver", pathToDriver);
                   vrátit nový FirefoxDriver();
               výchozí:
                   System.setProperty("webdriver.chrome.driver", pathToDriver);
                   vrátit nový ChromeDriver();
           }
       } jinak {
           System.setProperty("webdriver.chrome.driver",
                   pathToDriver);
           vrátit nový ChromeDriver();
       }
   }
   private String getDriverPath(String browserName) {
       String osData = System.getProperty("os.name").toLowerCase().split("\\\\s")[0];
       if (null != osData) {
           if (osData.equalsIgnoreCase("mac")) {
               return "./DriversExe/" + osData + "_" + název prohlížeče;
           } else if (osData.contains("nux") || (osData.contains("nix"))) {
               return "./DriversExe/linux_" + název prohlížeče;
           } else if (osData.contains("win")) {
               return "./DriversExe/" + osData + "_" + název prohlížeče + ".exe";
           }
       }
       return null;
   }
}

Zde je implementace třídy Remote Driver: 

balíček com.cyborg.core.web.utils.driverUtils; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import com.cyborg.core.generic.dataUtils.PropertiesDataUtils; import java.net.MalformedURLException; import java.net.URL; public class RemoteDriver implementuje IDriver { DesiredCapabilities caps; String remoteHuburl=PropertiesDataUtils.configDataStore.get("WEB_GRID_IP"); @Override public WebDriver init(String browserName) { if (browserName != null) { switch (browserName) { case "firefox": try { return new RemoteWebDriver(new URL(remoteHuburl), caps.firefox()); } catch (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } case "chrome": try { return new RemoteWebDriver(new URL(remoteHuburl), caps.chrome()); } catch (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } case "ie": try { return new RemoteWebDriver(new URL(remoteHuburl), caps.internetExplorer()); } catch (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } výchozí: try { return new RemoteWebDriver(new URL(remoteHuburl), caps.chrome()); } catch (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } } return null; } else { return null; } }

Zde je implementace třídy Factory, která poskytuje příslušný objekt třídy prohlížeče a ovladače: 

balíček com.cyborg.core.web.utils.driverUtils; public class DriverProvider { public IDriver getDriver(String typeOfDriver) { if (typeOfDriver != null) { switch (typeOfDriver) { case "local": return new LocalDriver(); case "remote": return new RemoteDriver(); výchozí: return new LocalDriver(); } } else { return null; } } }

Podobně můžete implementovat appium ovladač spolu se stejným designem, stačí poskytnout implementaci a deklarovat metodu v rozhraních IDriver. 

Závěr: Tímto zde uzavíráme, jak můžete při vytváření hybridního rámce v selenu používat jazykové návrhové vzory jako součást vzorových vzorů a osvědčených postupů selenu; v nadcházejících segmentech tutoriálu sestavíme rámec modelu Page Object pro Selenium Automation.

Chcete-li získat Celkový tutoriál o selenu najdete zde

Zanechat komentář