Mi az oldalobjektum-modell?
Az oldalobjektum-modell (POM) egy olyan tervezési minta, amelyet a tesztautomatikában népszerű módon használnak, és amely létrehozza az objektumtárolót a webes felhasználói felület elemeihez. A modell előnye, hogy csökkenti a kódduplikációt és javítja a tesztkarbantartást.
Ebben a modellben az alkalmazás minden weboldalához meg kell adni a megfelelő Oldalosztályt. Ez az oldalosztály azonosítja az adott weboldal webelemeit, és olyan oldal-módszereket is tartalmaz, amelyek az adott webelementeken műveleteket hajtanak végre. Ezeknek a módszereknek a nevét meg kell adni az általuk végrehajtott feladatnak megfelelően, azaz ha egy betöltő várja a fizetési átjáró megjelenését, a POM metódus neve lehet waitForPaymentScreenDisplay ().
Ebben az oktatóanyagban megtanulja-
- Miért az oldalobjektum-modell?
- A POM előnyei
- Hogyan lehet megvalósítani a POM-ot?
- Mi az az oldalgyár?
- Guru99 TestCase Page Factory koncepcióval
- AjaxElementLocatorFactory
Miért az oldalobjektum-modell?
UI automatizálás elindítása a Selenium WebDriver programban NEM nehéz feladat. Csak elemeket kell keresnie, műveleteket kell végrehajtania rajta.
Fontolja meg ezt az egyszerű szkriptet, hogy beléphessen egy webhelyre
Amint megfigyelheti, mindössze annyit teszünk, hogy elemeket találunk és kitöltési értékeket találunk ezekhez az elemekhez.
Ez egy kis szkript. A szkriptek karbantartása egyszerű. De idővel a tesztcsomag növekedni fog. Amint egyre több sort ad a kódjához, a dolgok nehézzé válnak.
A fő probléma a szkript karbantartásával az, hogy ha 10 különböző szkript használja ugyanazt az oldal elemet, az elem bármilyen változásával, akkor mind a 10 szkriptet meg kell változtatnia. Ez időigényes és hibára hajlamos.
A szkriptkarbantartás jobb megközelítése egy külön osztályfájl létrehozása, amely megtalálja a webes elemeket, kitölti vagy ellenőrzi őket. Ez az osztály az összes szkriptben újból felhasználható az adott elem használatával. A jövőben, ha változás történik a webes elemben, akkor csak 1 osztályfájlban kell elvégeznünk a változtatást, és nem 10 különböző szkriptben.
Ezt a megközelítést oldal-objektum modellnek hívják a szelénben. Segít a kód olvashatóbbá, karbantarthatóbbá és újrafelhasználhatóbbá tételében.
A POM előnyei
- Az oldalobjektum-tervezési minta szerint a felhasználói felületen végzett műveleteket és folyamatokat el kell választani az igazolástól. Ez a koncepció tisztábbá és könnyebben érthetővé teszi kódunkat.
- A második előny az, hogy az objektumtár független a tesztesetektől, ezért ugyanazt az objektumtárat különböző célokra használhatjuk különböző eszközökkel. Például integrálhatjuk a Selenium oldalobjektum modellt a TestNG / JUnit funkcióval a funkcionális teszteléshez, és egyúttal a JBehave / Cucumber programmal az elfogadás teszteléséhez.
- A kód a POM osztályok újrafelhasználható oldalmódszerei miatt kevesebb és optimalizáltabb lesz.
- A módszerek valósághűbb neveket kapnak, amelyek könnyen feltérképezhetők a felhasználói felületen végzett művelettel. azaz ha a gombra kattintás után a kezdőlapra kerülünk, akkor a módszer neve olyan lesz, mint a 'gotoHomePage ()'.
Hogyan lehet megvalósítani a POM-ot?
Egyszerű POM:
Ez a Page objektum modell keretrendszer alapstruktúrája, ahol az AUT összes webeleme és az ezeken a webelemeken működő módszer egy osztályfájlban van fenntartva. Az olyan feladatoknak, mint az ellenőrzés, külön kell lenniük a tesztelési módszerek részeként.
Teljes példa
TestCase: Nyissa meg a Guru99 bemutató webhelyet.
1. lépés: Lépjen a Guru99 bemutató webhelyére | |
2. lépés) A honlap check szöveg „Guru99 Bank” van jelen | |
3. lépés: Jelentkezzen be az alkalmazásba | |
4. lépés: Ellenőrizze, hogy a kezdőlap szövege "Manger Id: demo" |
Itt van 2 oldalunk
- Bejelentkezési oldal
- Kezdőlap (a bejelentkezés után jelenik meg)
Ennek megfelelően 2 POM-ot hozunk létre a szelén osztályokban
Guru99 bejelentkezési oldal POM
csomagoldalak;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;nyilvános osztály Guru99Login {WebDriver illesztőprogram;Felhasználó által99GuruName = By.name ("uid");Jelszóval99Guru = By.name ("jelszó");By titleText = By.clNév ("baron");Bejelentkezés alapján = By.name ("btnLogin");public Guru99Login (WebDriver illesztőprogram) {this.driver = meghajtó;}// Felhasználónév beállítása a szövegmezőbepublic void setUserName (karakterlánc strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Jelszó beállítása a jelszó szövegmezőbenpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Kattintson a bejelentkezés gombrapublic void clickLogin () {driver.findElement (login) .click ();}// Szerezd meg a bejelentkezési oldal címetpublic String getLoginTitle () {return driver.findElement (titleText) .getText ();}/ *** Ez a POM-módszer tesztesetben ki lesz téve az alkalmazásba történő bejelentkezésnek* @param strUserName* @param strPasword* @Visszatérés* /public void loginToGuru99 (Karakterlánc strUserName, String strPasword) {// Töltse ki a felhasználó nevétthis.setUserName (strUserName);// Töltse be a jelszótthis.setPassword (strPasword);// Kattintson a Bejelentkezés gombrathis.clickLogin ();}}
Guru99 honlap POM szelénben
csomagoldalak;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;nyilvános osztály Guru99HomePage {WebDriver illesztőprogram;By homePageUserName = By.xpath ("// tábla // tr [@ class = 'title3']");public Guru99HomePage (WebDriver illesztőprogram) {this.driver = meghajtó;}// A felhasználónév letöltése a kezdőlaprólpublic String getHomePageDashboardUserName () {return driver.findElement (homePageUserName) .getText ();}}
Guru99 Egyszerű POM szelén teszt esetében
csomag teszt;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;oldalak importálása.Guru99HomePage;oldalak importálása.Guru99Login;nyilvános osztály Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";WebDriver illesztőprogram;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ez a teszteset bejelentkezik a http://demo.guru99.com/V4/ webhelyre.* Ellenőrizze a bejelentkezési oldal címét guru99 bankként* Jelentkezzen be az alkalmazásba* Ellenőrizze a kezdőlapot az Irányítópult üzenet segítségével* /@Test (prioritás = 0)public void test_Home_Page_Appear_Correct () {// Bejelentkezésoldal objektum létrehozásaobjLogin = new Guru99Login (meghajtó);// Ellenőrizze a bejelentkezési oldal címétString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Tartalmazza ("guru99 bank"));// belépés az alkalmazásbaobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// lépjen a következő oldalraobjHomePage = új Guru99HomePage (meghajtó);// Ellenőrizze a kezdőlapotAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Tartalmaz ("jászolazonosító: mgr123"));}
Mi az oldalgyár a szelénben?
A Seleniumban található Page Factory egy beépített Page Object Model keretkoncepció a Selenium WebDriver számára, de nagyon optimalizált. Az oldalobjektumok inicializálására vagy maga az oldalobjektum példányosítására szolgál. Használható a Page class elemek inicializálására a "FindElement / s" használata nélkül is.
Itt is követjük az oldalobjektum-tár és a tesztelési módszerek elkülönítésének koncepcióját. Ezenkívül a Szelénben található PageFactory osztály segítségével a @FindBy annotációkat használjuk a WebElement megtalálásához. Az initElements metódust használjuk a webes elemek inicializálásához
A @FindBy el tudja fogadni a tagName, a részlegesLinkText, a név, a linkText, az id, a css, a className, az xpath attribútumokat.
Nézzük meg ugyanazt a példát, mint fent, a Page Factory használatával
Guru99 bejelentkezési oldal a Page Factory-vel
csomag PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;nyilvános osztály Guru99Login {/ *** Az összes webes elemet a @FindBy kommentár határozza meg* /WebDriver illesztőprogram;@FindBy (név = "uid")WebElement felhasználó99GuruName;@FindBy (név = "jelszó")WebElement jelszó99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (név = "btnLogin")WebElement bejelentkezés;public Guru99Login (WebDriver illesztőprogram) {this.driver = meghajtó;// Ez az initElements módszer létrehozza az összes webelementetPageFactory.initElements (meghajtó, ez);}// Felhasználónév beállítása a szövegmezőbepublic void setUserName (karakterlánc strUserName) {user99GuruName.sendKeys (strUserName);}// Jelszó beállítása a jelszó szövegmezőbenpublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Kattintson a bejelentkezés gombrapublic void clickLogin () {login.click ();}// Szerezd meg a bejelentkezési oldal címetpublic String getLoginTitle () {return titleText.getText ();}/ *** Ez a POM-módszer tesztesetben ki lesz téve az alkalmazásba történő bejelentkezésnek* @param strUserName* @param strPasword* @Visszatérés* /public void loginToGuru99 (Karakterlánc strUserName, String strPasword) {// Töltse ki a felhasználó nevétthis.setUserName (strUserName);// Töltse be a jelszótthis.setPassword (strPasword);// Kattintson a Bejelentkezés gombrathis.clickLogin ();}}
Guru99 kezdőlap az oldalgyárral
csomag PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;nyilvános osztály Guru99HomePage {WebDriver illesztőprogram;@FindBy (xpath = "// tábla // tr [@ class = 'head3']")WebElement homePageUserName;public Guru99HomePage (WebDriver illesztőprogram) {this.driver = meghajtó;// Ez az initElements módszer létrehozza az összes webelementetPageFactory.initElements (meghajtó, ez);}// A felhasználónév letöltése a kezdőlaprólpublic String getHomePageDashboardUserName () {return homePageUserName.getText ();}}
Guru99 TestCase Page Factory koncepcióval
csomag teszt;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;importálja a PageFactory.Guru99HomePage;importálja a PageFactory.Guru99Login;public class Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";WebDriver illesztőprogram;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ez a teszt a http://demo.guru99.com/V4/ webhelyre látogatható* Ellenőrizze a bejelentkezési oldal címét guru99 bankként* Jelentkezzen be az alkalmazásba* Ellenőrizze a kezdőlapot az Irányítópult üzenet segítségével* /@Test (prioritás = 0)public void test_Home_Page_Appear_Correct () {// Bejelentkezésoldal objektum létrehozásaobjLogin = new Guru99Login (meghajtó);// Ellenőrizze a bejelentkezési oldal címétString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Tartalmazza ("guru99 bank"));// belépés az alkalmazásbaobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// lépjen a következő oldalraobjHomePage = új Guru99HomePage (meghajtó);// Ellenőrizze a kezdőlapotAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Tartalmaz ("jászolazonosító: mgr123"));}}
A teljes projektszerkezet úgy fog kinézni, mint a diagram:
AjaxElementLocatorFactory
Az AjaxElementLocatorFactory a szelénben található PageFactory lusta betöltési koncepciója. Csak akkor használják a webes elemek megkeresésére, ha az elemeket bármilyen művelet során használják. Időtúllépést rendel a WebElementekhez az objektum oldalosztályhoz. A PageFactory minta szelénben való használatának egyik legfontosabb előnye az AjaxElementLocatorFactory osztály.
Itt, amikor egy elemen műveletet hajtanak végre, a láthatóságra való várakozás csak ettől a pillanattól kezdődik. Ha az elem nem található az adott időintervallumban, akkor a Tesztes eset végrehajtása kivonja a „NoSuchElementException” kivételt.
Összegzés
- A Selenium Websdriver oldalobjektum-modellje egy Object Repository tervezési minta.
- A szelén oldal objektum modell fenntartható, újrafelhasználhatóvá teszi a tesztkódunkat.
- A Page Factory egy optimalizált módszer objektumtár létrehozására az Page Object Model keretrendszer koncepciójában.
- Az AjaxElementLocatorFactory egy lusta betöltési koncepció a Page Factory - oldal objektumtervezési mintájában, amely csak akkor azonosítja a WebElementeket, ha bármilyen művelet során használják őket.
Töltse le a bemutatóhoz tartozó Selenium Project fájlokat ebben az oktatóanyagban