2 Fontos szelén tervezési minták és bevált gyakorlatok

Ebben az oktatóanyagban megismerjük a Selenium tervezési mintáit és a bevált gyakorlatokat, miközben a Selenium Automation keretrendszer fejlesztésével dolgozunk (hibrid keretrendszer a szelénben), a Framework Design vagy Framework modell két változatát kell figyelembe vennünk, ezek a következők: 

Tudnunk és meg kell értenünk, hogy miért van szükség a nyelvi tervezési mintára, amikor fejlesztjük saját magunkat keret az egyik Szelénben keretmodell. Javasoljuk, hogy nézze át az előző szakaszokat Selenium Framework fejlesztési oktatósorozat hogy a teljes megértést megkapja .

Értsük meg ezt részletesen: 

szelén tervezési minták és legjobb gyakorlatok -hibrid váz szelénben

Szelén tervezési minták és legjobb gyakorlatok – hibrid keretrendszer a szelénben
Szelén tervezési minták és legjobb gyakorlatok – hibrid keretrendszer szelén

Bármilyen keretrendszer tervezése során figyelembe kell vennünk néhány tervezési architektúrát, azaz a szelén tervezési mintákat és a legjobb gyakorlatokat, és a keretmodell típusának megfelelően ki kell választanunk egy nyelvet. Tervezési minta hogy megoldja a kerettervezés egészének problémahelyzetét.

Következtetésképpen tehát választhatunk a szelén keretmodell közül (hibrid, Oldalobjektum modell, Data Driven stb.), de a modell megvalósításához követnünk és implementálnunk kell néhány nyelvi tervezési mintát (pl. java/C# tervezési mintákat) 

Miért van szükségünk szelén tervezési mintára és bevált gyakorlatokra a Selenium Framework építése során: 

Milyen tervezési mintákat kell használni a Selenium Frameworkben: 

Van néhány tervezési minta, amelyet felhasználhat a keretrendszer különböző területeinek megvalósításához, például egy példa: 

A következő bejegyzésekben elkészítjük a teljes keretrendszer élő kódolási sablonját.

Singleton tervezési minta hibrid keretrendszerhez szelénben: 

A Singleton Design Pattern egy olyan minta, amelyben csak egy objektumot hozhat létre egy osztályból, és ugyanazt az objektumot használhatja az osztály metódusainak eléréséhez; használhatjuk a tervezési mintát a konfigurátorban, ahol csak a konfigurációs adatokat kell beolvasnunk, és betölthetünk valamilyen adattárba (bármilyen adatstruktúra, amelyet szükség szerint használhatunk a végrehajtás során bármely osztályból és metódusból) 

Tehát ugyanezt az alábbi módon érhetjük el, miközben ugyanazt a Singleton Design mintával tervezzük. 

MEGJEGYZÉS: A keretrendszert a semmiből fogjuk megtervezni és fejleszteni az oktatóanyag-sorozat következő részében, de ez a konkrét oktatóanyag betekintést nyújt a tervezési minta szükségességébe.

csomag 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; // Ez a SingleTon osztály nyilvános osztály PropertiesDataUtils { private Properties property = null; nyilvános statikus LinkedHashMap configDataStore = új LinkedHashMap (); InputStream = null; // Ez az osztály statikus és privát hivatkozása, amelyet bárhol használhat a keretrendszerben privát static PropertiesDataUtils propertiesDataUtils = null; logikai centralizeLog = false; // Ez a Private konstruktor az objektum létrehozásához, de ezt nem érheti el az osztályon kívülről a SingleTon minta kialakításának fenntartásához, azaz csak egy objektum létrehozásához.
 private PropertiesDataUtils(String filePath) { generálniDataStore(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() { } // Ez a metódus alapvetően létrehozza a SingleTon osztály példányát public static PropertiesDataUtils getInstance(String filePath) { if (propertiesDataUtils == null) propertiesDataUtils = new PropertiesDataUtils(filePath); return propertiesDataUtils; } // ez a metódus alapvetően létrehozza azt az adattárat, ahol az összes konfigurációs adatot tárolni kívánja, ahogy azt korábban tárgyaltuk private void generateDataStore(String filePath) { try { this.properties = new Properties(); is=new FileInputStream(filePath); tulajdonságok.load(is); overrideFromEnvironment(); Készlet keys = loadAllKeys(); for (Object k : keys) { String key = (String) k; configDataStore.put(kulcs, getPropertyValue(kulcs)); } } catch (FileNotFoundException fileNotFoundException) { String kivételData = String.valueOf(fileNotFoundException.getCause().getMessage()); } catch (IOException ioException) { String kivételData = String.valueOf(ioException.getCause().getMessage()); } végül { if (null != is) { try { is.close(); } catch (e kivétel) { String kivételData = String.valueOf(e.getCause().getMessage()); } } } } // Ezzel a módszerrel tölthető be az összes kulcs a tulajdonságfájlból.

Ezzel a megközelítéssel használhatjuk a Singleton tervezési mintát, és felhasználhatjuk a keretrendszerünkben.

Gyári tervezési minta a szelén keretrendszerben: 

A gyári tervezési mintában létrehozunk egy osztályt (ezt Factory osztálynak hívjuk), másrészt van egy interfész, és végül „n” számú osztály valósítja meg.

A gyári osztály alapvetően a fenti osztályok objektumát adja vissza (igénytől függően), így nem kell a fentiekkel foglalkozni „n” az osztályok objektumainak száma; ehelyett létrehozhat egy objektumot a Factory osztályból, és meghívhatja a gyári osztály metódusát, amely visszaadja a szükséges alapobjektumot a szükséges osztályokhoz az Adobe „n” osztályok közül.

Most ezt a kialakítást figyelembe veheti a különböző Webdriver/böngésző megvalósítás létrehozásakor. 

Van egy változatos böngésző és a megvalósítás egy másik típusú Seleniummal illesztőprogram (pl. LocalDriver, RemoteDriver, ThreadDriver stb.), és amikor és amikor egy adott típusú illesztőprogramra és adott típusú böngészőre van szüksége, megemlítheti a konfigurációs fájlban, és szükség szerint a gyári osztály biztosítja a példányt az illesztőprogramot és a böngészőt az automatizálási parancsfájl további használatához. 

Íme a kódalap ennek a tervezési mintának az illesztőprogram-böngésző interakcióinak létrehozásakor történő megvalósításához: 

Interfész tervezés: 

csomag 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” számú tallózási osztály megvalósítás (akik implementálják a felületet):

csomag 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 implements IDriver { public WebDriver init(String browserName) { String pathToDriver = getDriverPath(browserName); if (null != browserName) { switch (browserName) { case "chrome": System.setProperty("webdriver.chrome.driver", pathToDriver); return new ChromeDriver(); case "firefox": System.setProperty("webdriver.gecko.driver", pathToDriver); return new FirefoxDriver(); alapértelmezett: System.setProperty("webdriver.chrome.driver", pathToDriver); return new ChromeDriver(); } } else { System.setProperty("webdriver.chrome.driver", pathToDriver); return new 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 + "_" + böngészőnév; } else if (osData.contains("nux") || (osData.contains("nix"))) { return "./DriversExe/linux_" + böngészőnév; } else if (osData.contains("win")) { return "./DriversExe/" + osData + "_" + böngészőnév + ".exe"; } } return null; } }

Íme a Remote Driver osztály megvalósítása: 

csomag 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 implementálja az IDriver { DesiredCapabilities caps; String remoteHuburl=PropertiesDataUtils.configDataStore.get("WEB_GRID_IP"); @A public WebDriver init(String browserName) felülbírálása { if (browserName != null) { switch (böngészőnév) { 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(); } default: try { return new RemoteWebDriver(new URL(remoteHuburl), caps.chrome()); } catch (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } } return null; } else { return null; } }

Itt van a Factory osztály megvalósítása, amely biztosítja a megfelelő böngésző- és illesztőprogram-osztály objektumot: 

csomag 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": új RemoteDriver(); alapértelmezett: return new LocalDriver(); } } else { return null; } } }

Hasonlóképpen megvalósíthatja a appium meghajtó ugyanazzal a kialakítással együtt, csak adja meg a megvalósítást, és deklaráljon egy metódust az IDriver felületeken. 

Következtetés: Ezzel itt azt a következtetést vonjuk le, hogy hogyan használhatja a nyelvi tervezési mintákat a Selenium tervezési minták és legjobb gyakorlatok részeként a hibrid keretrendszer fejlesztése során a Seleniumban; az oktatóanyag következő szakaszaiban megépítjük a szelénautomatizálás oldalobjektum-modell keretrendszerét.

A A szelénről szóló átfogó bemutató itt található

Írj hozzászólást

E-mail címed nem kerül nyilvánosságra. Kötelező kitölteni *

Lapozzon a lap tetejére