Čo je to objektový model stránky?
Page Object Model (POM) je návrhový vzor, ktorý sa populárne používa v automatizácii testov a ktorý vytvára objektové úložisko pre prvky webového používateľského rozhrania. Výhodou modelu je, že znižuje duplikáciu kódu a zlepšuje údržbu testov.
V rámci tohto modelu by pre každú webovú stránku v aplikácii mala existovať zodpovedajúca trieda stránky. Táto trieda Page identifikuje WebElements tejto webovej stránky a obsahuje tiež metódy Page, ktoré vykonávajú operácie s týmito WebElements. Názov týchto metód by mal byť uvedený podľa úlohy, ktorú vykonávajú, tj. Ak načítač čaká na zobrazenie platobnej brány, názov metódy POM môže byť waitForPaymentScreenDisplay ().
V tomto návode sa naučíte
- Prečo Page Object Model?
- Výhody POM
- Ako implementovať POM?
- Čo je Page Factory?
- Guru99 TestCase s konceptom Page Factory
- AjaxElementLocatorFactory
Prečo Page Object Model?
Spustenie automatizácie používateľského rozhrania v selenovom WebDrivere NIE je náročná úloha. Musíte len nájsť prvky, vykonať na nich operácie.
Zvážte tento jednoduchý skript na prihlásenie na webovú stránku
Ako môžete vidieť, všetko, čo robíme, je hľadanie prvkov a vyplňovanie hodnôt pre tieto prvky.
Toto je malý scenár. Údržba skriptov vyzerá ľahko. Ale s časom testovací balík porastie. Keď do svojho kódu pridávate čoraz viac riadkov, všetko sa zhoršuje.
Hlavným problémom pri údržbe skriptov je, že ak rovnaký element stránky používa 10 rôznych skriptov, pri akejkoľvek zmene v tomto prvku musíte zmeniť všetkých 10 skriptov. To je časovo náročné a náchylné na chyby.
Lepším prístupom k údržbe skriptov je vytvoriť samostatný súbor triedy, ktorý by našiel webové prvky, vyplnil ich alebo overil. Túto triedu je možné znova použiť vo všetkých skriptoch používajúcich tento prvok. V budúcnosti, ak dôjde k zmene webového prvku, musíme vykonať zmenu iba v jednom súbore triedy a nie v 10 rôznych skriptoch.
Tento prístup sa nazýva Page Object Model in Selenium. Pomáha to dosiahnuť, aby bol kód čitateľnejší, udržiavateľnejší a opakovane použiteľný.
Výhody POM
- Vzor návrhu objektu stránky hovorí, že operácie a toky v používateľskom rozhraní by mali byť oddelené od overenia. Vďaka tomuto konceptu je náš kód čistejší a ľahšie pochopiteľný.
- Druhou výhodou je, že úložisko objektov je nezávislé od testovacích prípadov, takže môžeme použiť rovnaké úložisko objektov na rôzne účely s rôznymi nástrojmi. Napríklad môžeme integrovať Page Object Model v seléne s TestNG / JUnit pre funkčné testovanie a súčasne s JBehave / Cucumber pre akceptačné testovanie.
- Kód sa zmenší a optimalizuje kvôli opakovane použiteľným metódam stránok v triedach POM.
- Metódy získavajú realistickejšie názvy, ktoré možno ľahko mapovať s operáciou prebiehajúcou v používateľskom rozhraní. tj ak po kliknutí na tlačidlo prídeme na domovskú stránku, názov metódy bude ako „gotoHomePage ()“.
Ako implementovať POM?
Jednoduchý POM:
Je to základná štruktúra rámca modelu objektu Page, kde sú všetky webové prvky AUT a metóda, ktorá na nich pracuje, udržiavané v súbore triedy. Úloha ako overenie by mala byť ako súčasť testovacích metód samostatná.
Kompletný príklad
TestCase: Prejdite na ukážkovú stránku Guru99.
Krok 1) Prejdite na ukážkovú stránku Guru99 | |
Krok 2) V úvodnej stránku check textom "Guru99 Bank" je prítomná | |
Krok 3) Prihláste sa do aplikácie | |
Krok 4) Overte, či domovská stránka obsahuje text ako „Identifikátor správcu: ukážka“ |
Máme tu 2 stránky
- Prihlasovacia stránka
- Domovská stránka (zobrazí sa po prihlásení)
V súlade s tým vytvoríme 2 POM v triedach selénu
Guru99 Prihlasovacia stránka POM
stránky balíkov;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;verejná trieda Guru99Login {Ovládač WebDriver;Autor user99GuruName = By.name ("uid");Autor: password99Guru = By.name ("heslo");By titleText = Podľa.triedy ("barone");Prihlasovacím menom = By.name ("btnLogin");verejné Guru99Login (ovládač WebDriver) {this.driver = vodič;}// Nastaví meno používateľa do textového poľapublic void setUserName (reťazec strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Nastaviť heslo do textového poľa pre heslopublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Kliknite na prihlasovacie tlačidlopublic void clickLogin () {driver.findElement (login) .click ();}// Získajte názov prihlasovacej stránkypublic String getLoginTitle () {návrat driver.findElement (titleText) .getText ();}/ *** Táto metóda POM bude v testovacom prípade sprístupnená na prihlásenie do aplikácie* @param strUserName* @param strPasword* @ návrat* /public void loginToGuru99 (String strUserName, String strPasword) {// Vyplňte meno používateľathis.setUserName (strUserName);// Vyplňte heslothis.setPassword (strPasword);// Kliknite na tlačidlo Prihlásiť sathis.clickLogin ();}}
Domovská stránka Guru99 POM v seléne
stránky balíkov;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;verejná trieda Guru99HomePage {Ovládač WebDriver;By homePageUserName = By.xpath ("// tabuľka // tr [@ class = 'hlavička3']");public Guru99HomePage (ovládač WebDriver) {this.driver = vodič;}// Získajte meno používateľa z domovskej stránkyverejný reťazec getHomePageDashboardUserName () {vrátiť driver.findElement (homePageUserName) .getText ();}}
Guru99 Simple POM in Selenium Test case
test balenia;import 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;importovať stránky.Guru99HomePage;importovať stránky.Guru99Login;verejná trieda Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Ovládač WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestnastavenie verejnej neplatnosti () {System.setProperty ("webdriver.gecko.driver", driverPath);ovládač = nový FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tento testovací prípad sa prihlási na adrese http://demo.guru99.com/V4/* Overte si prihlasovací názov stránky ako banka guru99* Prihláste sa do aplikácie* Overte domovskú stránku pomocou správy na hlavnom paneli* /@Test (priorita = 0)public void test_Home_Page_Appear_Correct () {// Vytvorenie objektu prihlasovacej stránkyobjLogin = nový Guru99Login (vodič);// Overte názov prihlasovacej stránkyReťazec loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Obsahuje ("banka guru99"));// prihlásenie do aplikácieobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// prejsť na ďalšiu stránkuobjHomePage = nový Guru99HomePage (ovládač);// Overte domovskú stránkuAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contains ("manger id: mgr123"));}
Čo je Page Factory v seléne?
Page Factory v seléne je vstavaný koncepčný rámec Page Object Model pre selénový WebDriver, ale je veľmi optimalizovaný. Používa sa na inicializáciu objektov Page alebo na vytvorenie inštancie samotného objektu Page. Používa sa tiež na inicializáciu prvkov triedy Page bez použitia nástroja „FindElement / s“.
Aj tu sa riadime konceptom oddelenia úložísk stránok a testovacích metód. Okrem toho pomocou triedy PageFactory v seléne používame anotácie @FindBy na nájdenie WebElement. Na inicializáciu webových prvkov používame metódu initElements
@FindBy môže ako atribúty prijímať tagName, partialLinkText, name, linkText, id, css, className, xpath .
Pozrime sa na ten istý príklad ako vyššie pomocou aplikácie Page Factory
Prihlasovacia stránka Guru99 so stránkou Page Factory
balík PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importovať org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;verejná trieda Guru99Login {/ *** Všetky prvky WebElements sú označené anotáciou @FindBy* /Ovládač WebDriver;@FindBy (name = "uid")WebElement user99GuruName;@FindBy (meno = "heslo")Heslo WebElement99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")Prihlásenie WebElement;verejné Guru99Login (ovládač WebDriver) {this.driver = vodič;// Táto metóda initElements vytvorí všetky WebElementsPageFactory.initElements (ovládač, tento);}// Nastaví meno používateľa do textového poľapublic void setUserName (reťazec strUserName) {user99GuruName.sendKeys (strUserName);}// Nastaviť heslo do textového poľa pre heslopublic void setPassword (String strPassword) {heslo99Guru.sendKeys (strPassword);}// Kliknite na prihlasovacie tlačidlopublic void clickLogin () {login.click ();}// Získajte názov prihlasovacej stránkypublic String getLoginTitle () {návrat titleText.getText ();}/ *** Táto metóda POM bude v testovacom prípade sprístupnená na prihlásenie do aplikácie* @param strUserName* @param strPasword* @ návrat* /public void loginToGuru99 (String strUserName, String strPasword) {// Vyplňte meno používateľathis.setUserName (strUserName);// Vyplňte heslothis.setPassword (strPasword);// Kliknite na tlačidlo Prihlásiť sathis.clickLogin ();}}
Domovská stránka Guru99 s funkciou Page Factory
balík PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importovať org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;verejná trieda Guru99HomePage {Ovládač WebDriver;@FindBy (xpath = "// tabuľka // tr [@ class = 'hlavička3']")WebElement homePageUserName;public Guru99HomePage (ovládač WebDriver) {this.driver = vodič;// Táto metóda initElements vytvorí všetky WebElementsPageFactory.initElements (ovládač, tento);}// Získajte meno používateľa z domovskej stránkyverejný reťazec getHomePageDashboardUserName () {vrátiť homePageUserName.getText ();}}
Guru99 TestCase s konceptom Page Factory
test balenia;import 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;importovať stránku PageFactory.Guru99HomePage;importovať PageFactory.Guru99Login;verejná trieda Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Ovládač WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestnastavenie verejnej neplatnosti () {System.setProperty ("webdriver.gecko.driver", driverPath);ovládač = nový FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tento test nájdete na stránke http://demo.guru99.com/V4/* Overte si prihlasovací názov stránky ako banka guru99* Prihláste sa do aplikácie* Overte domovskú stránku pomocou správy na hlavnom paneli* /@Test (priorita = 0)public void test_Home_Page_Appear_Correct () {// Vytvorenie objektu prihlasovacej stránkyobjLogin = nový Guru99Login (vodič);// Overte názov prihlasovacej stránkyReťazec loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Obsahuje ("banka guru99"));// prihlásenie do aplikácieobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// prejsť na ďalšiu stránkuobjHomePage = nový Guru99HomePage (ovládač);// Overte domovskú stránkuAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contains ("manger id: mgr123"));}}
Kompletná štruktúra projektu bude vyzerať nasledovne:
AjaxElementLocatorFactory
AjaxElementLocatorFactory je lenivý koncept načítania PageFactory v seléne. Používa sa na vyhľadanie webových prvkov, iba ak sa prvky používajú v akejkoľvek operácii. Priraďuje časový limit pre WebElements triede stránky objektov. Jednou z kľúčových výhod použitia vzoru PageFactory v seléne je trieda AjaxElementLocatorFactory.
Tu, keď sa vykonáva operácia na prvku, čakanie na jeho viditeľnosť sa začína až od tohto okamihu. Ak sa prvok v danom časovom intervale nenájde, vykonanie testovacieho prípadu vyvolá výnimku „NoSuchElementException“.
Zhrnutie
- Stránka Objektový model vo webovom ovládači selénu je návrhový vzor úložiska objektov.
- Objektový model stránky selén vytvára náš testovací kód udržiavateľný, opakovane použiteľný.
- Page Factory je optimalizovaný spôsob vytvárania úložiska objektov v koncepcii rámca Page Object Model.
- AjaxElementLocatorFactory je koncept lenivého načítania v aplikácii Page Factory - návrhový vzor objektu stránky, ktorý slúži na identifikáciu prvkov WebElements iba v prípade, že sa používajú v akejkoľvek operácii.
Stiahnite si súbory projektu Selenium pre ukážku v tomto výučbe