Kaj je objektni model strani?
Page Object Model (POM) je oblikovalski vzorec, ki se popularno uporablja v testni avtomatizaciji in ustvarja Object Repository za elemente spletnega uporabniškega vmesnika. Prednost modela je, da zmanjšuje podvajanje kode in izboljša vzdrževanje testa.
Po tem modelu mora biti za vsako spletno stran v aplikaciji ustrezen razred strani. Ta razred Page bo identificiral WebElements te spletne strani in vsebuje tudi metode Page, ki izvajajo operacije na teh WebElements. Ime teh metod je treba navesti glede na nalogo, ki jo izvajajo, tj. Če nalagalnik čaka, da se prikaže plačilni prehod, je lahko ime metode POM waitForPaymentScreenDisplay ().
V tej vadnici boste izvedeli-
- Zakaj objektni model strani?
- Prednosti POM
- Kako implementirati POM?
- Kaj je Page Factory?
- Guru99 TestCase s konceptom Page Factory
- AjaxElementLocatorFactory
Zakaj objektni model strani?
Zagon avtomatizacije uporabniškega vmesnika v programu Selenium WebDriver NI težka naloga. Samo elemente morate poiskati in na njih izvesti operacije.
Razmislite o tem preprostem skriptu za prijavo na spletno mesto
Kot lahko opazite, vse, kar počnemo, je iskanje elementov in polnjenje vrednosti teh elementov.
To je majhen scenarij. Vzdrževanje skriptov je videti enostavno. Toda sčasoma bo testni paket naraščal. Ko v kodo dodajate vedno več vrstic, postanejo stvari težke.
Glavna težava pri vzdrževanju skriptov je, da če 10 različnih skriptov uporablja isti element strani, morate ob kakršni koli spremembi tega elementa spremeniti vseh 10 skriptov. To je zamudno in nagnjeno k napakam.
Boljši pristop k vzdrževanju skriptov je ustvariti ločeno datoteko razreda, ki bi našla spletne elemente, jih napolnila ali preverila. Ta razred je mogoče znova uporabiti v vseh skriptah, ki uporabljajo ta element. Če se bo spletni element v prihodnosti spremenil, ga moramo spremeniti v samo 1 datoteko razreda in ne v 10 različnih skriptih.
Ta pristop se imenuje Page Object Model in Selenium. Kodo pripomore k boljši berljivosti, vzdrževanju in ponovni uporabi.
Prednosti POM
- Vzorec oblikovanja predmetov strani pravi, da je treba operacije in tokove v uporabniškem vmesniku ločiti od preverjanja. Zaradi tega koncepta je naša koda čistejša in enostavnejša za razumevanje.
- Druga prednost je, da je repozitorij predmetov neodvisen od testnih primerov, zato lahko isto repozitorij predmetov uporabimo za različne namene z različnimi orodji. Na primer, lahko objektni model strani integriramo v selen s testNG / JUnit za funkcionalno preskušanje in hkrati z JBehave / kumarico za preskus sprejemljivosti.
- Koda postane manj in optimizirana zaradi ponovnih metod strani v razredih POM.
- Metode dobijo bolj realna imena, ki jih je mogoče enostavno preslikati z operacijo, ki se dogaja v uporabniškem vmesniku. če torej po kliku na gumb pristanemo na domači strani, bo ime metode kot 'gotoHomePage ()'.
Kako implementirati POM?
Preprost POM:
To je osnovna struktura okvira objektnega modela strani, kjer se vsi spletni elementi AUT in metoda, ki deluje na teh spletnih elementih, hranijo v datoteki razreda. Naloga, kot je preverjanje, mora biti ločena kot del testnih metod.
Popoln primer
TestCase: Pojdite na predstavitveno spletno mesto Guru99.
1. korak: Pojdite na predstavitveno spletno mesto Guru99 | |
Korak 2) V prijavi besedilu Domača stran «Guru99 banka" je prisoten | |
3. korak) Prijavite se v aplikacijo | |
Korak 4) Preverite, ali domača stran vsebuje besedilo "Manger Id: demo" |
Tu imamo opravka z dvema stranema
- Stran za prijavo
- Domača stran (prikazano po prijavi)
V skladu s tem ustvarimo 2 POM v razredih selena
Stran za prijavo Guru99 POM
strani paketov;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;javni razred Guru99Login {Gonilnik WebDriver;Po user99GuruName = By.name ("uid");Z geslom99Guru = Z.ime ("geslo");Po naslovuText = By.className ("barone");Po prijavi = By.name ("btnLogin");javni Guru99Login (gonilnik WebDriver) {this.driver = voznik;}// Uporabniško ime nastavimo v besedilno poljejavna praznina setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// V besedilno polje za geslo nastavimo geslopublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Kliknite gumb za prijavopublic void clickLogin () {driver.findElement (prijava) .click ();}// Pridobite naslov strani za prijavojavni niz getLoginTitle () {vrnitev driver.findElement (titleText) .getText ();}/ *** Ta metoda POM bo v testnem primeru izpostavljena prijavi v aplikacijo* @param strUserName* @param strPasword* @ vrni se* /public void loginToGuru99 (String strUserName, String strPasword) {// Izpolnite uporabniško imethis.setUserName (strUserName);// Izpolnite geslothis.setPassword (strPasword);// Kliknite gumb Prijavathis.clickLogin ();}}
Domača stran Guru99 POM v selenu
strani paketov;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;javni razred Guru99HomePage {Gonilnik WebDriver;Po homePageUserName = By.xpath ("// tabela // tr [@ class = 'heading3']");javni Guru99HomePage (gonilnik WebDriver) {this.driver = voznik;}// Pridobite uporabniško ime z domače stranijavni niz getHomePageDashboardUserName () {vrnitev driver.findElement (homePageUserName) .getText ();}}
Guru99 Simple POM v testnem primeru selena
paketni test;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;strani za uvoz.Guru99HomePage;strani za uvoz.Guru99Login;javni razred Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Gonilnik WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestnastavitev javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ta testni primer se bo prijavil na http://demo.guru99.com/V4/* Naslov strani za prijavo potrdite kot banko guru99* Prijava v aplikacijo* Preverite domačo stran s sporočilom Nadzorna plošča* /@Test (prioriteta = 0)javna void test_Home_Page_Appear_Correct () {// Ustvari predmet prijavne straniobjLogin = nov Guru99Login (gonilnik);// Preverite naslov strani za prijavoNiz loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Vsebuje ("guru99 bank"));// prijava v aplikacijoobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// gremo na naslednjo stranobjHomePage = nov Guru99HomePage (gonilnik);// Preverjanje domače straniAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Vsebuje ("id jaslice: mgr123"));}
Kaj je Page Factory v selenu?
Page Factory in Selenium je vgrajeni koncept okvirja objektnega modela strani za Selenium WebDriver, vendar je zelo optimiziran. Uporablja se za inicializacijo predmetov Page ali za instanciranje samega predmeta Page. Uporablja se tudi za inicializacijo elementov razreda Page, ne da bi uporabili »FindElement / s«.
Tudi tu sledimo konceptu ločevanja repozitorija predmetov strani in testnih metod. Poleg tega s pomočjo razreda PageFactory v Selenu uporabljamo pripombe @FindBy za iskanje WebElementa. Za inicializacijo spletnih elementov uporabljamo metodo initElements
@FindBy lahko kot atribute sprejme oznakeName, delnoLinkText, ime, povezavoText, id, css, className, xpath .
Oglejmo si isti primer kot zgoraj z uporabo Page Factory
Stran za prijavo v Guru99 s tovarno strani
paket PageFactory;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;javni razred Guru99Login {/ *** Vsi WebElements so označeni s pripisom @FindBy* /Gonilnik WebDriver;@FindBy (name = "uid")Uporabnik WebElement99GuruName;@FindBy (name = "geslo")Geslo WebElement99Guru;@FindBy (className = "barone")Naslov WebElementText;@FindBy (name = "btnLogin")Prijava v WebElement;javni Guru99Login (gonilnik WebDriver) {this.driver = voznik;// Ta metoda initElements bo ustvarila vse WebElementsPageFactory.initElements (gonilnik, to);}// Uporabniško ime nastavimo v besedilno poljejavna praznina setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// V besedilno polje za geslo nastavimo geslopublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Kliknite gumb za prijavopublic void clickLogin () {login.click ();}// Pridobite naslov strani za prijavojavni niz getLoginTitle () {vrni titleText.getText ();}/ *** Ta metoda POM bo v testnem primeru izpostavljena prijavi v aplikacijo* @param strUserName* @param strPasword* @ vrni se* /public void loginToGuru99 (String strUserName, String strPasword) {// Izpolnite uporabniško imethis.setUserName (strUserName);// Izpolnite geslothis.setPassword (strPasword);// Kliknite gumb Prijavathis.clickLogin ();}}
Domača stran Guru99 s tovarno strani
paket PageFactory;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;javni razred Guru99HomePage {Gonilnik WebDriver;@FindBy (xpath = "// tabela // tr [@ class = 'heading3']")WebElement homePageUserName;javni Guru99HomePage (gonilnik WebDriver) {this.driver = voznik;// Ta metoda initElements bo ustvarila vse WebElementsPageFactory.initElements (gonilnik, to);}// Pridobite uporabniško ime z domače stranijavni niz getHomePageDashboardUserName () {vrni se homePageUserName.getText ();}}
Guru99 TestCase s konceptom Page Factory
paketni test;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;uvoz PageFactory.Guru99HomePage;uvoz PageFactory.Guru99Login;javni razred Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Gonilnik WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestnastavitev javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ta test pojdite na http://demo.guru99.com/V4/* Naslov strani za prijavo potrdite kot banko guru99* Prijava v aplikacijo* Preverite domačo stran s sporočilom Nadzorna plošča* /@Test (prioriteta = 0)javna void test_Home_Page_Appear_Correct () {// Ustvari predmet prijavne straniobjLogin = nov Guru99Login (gonilnik);// Preverite naslov strani za prijavoNiz loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Vsebuje ("guru99 bank"));// prijava v aplikacijoobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// gremo na naslednjo stranobjHomePage = nov Guru99HomePage (gonilnik);// Preverjanje domače straniAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Vsebuje ("id jaslice: mgr123"));}}
Celotna struktura projekta bo videti kot diagram:
AjaxElementLocatorFactory
AjaxElementLocatorFactory je leni koncept nalaganja PageFactory v selenu. Uporablja se za iskanje spletnih elementov le, kadar so elementi uporabljeni v kateri koli operaciji. Razredu predmetne strani dodeli časovno omejitev za WebElements. Ena ključnih prednosti uporabe vzorca PageFactory v selenu je razred AjaxElementLocatorFactory.
Tu se pri izvedbi operacije na elementu čakanje na njegovo vidnost začne šele od tega trenutka. Če elementa v danem časovnem intervalu ni mogoče najti, bo izvedba testnega primera vrgla izjemo »NoSuchElementException«.
Povzetek
- Model strani Page v programu Selenium Websdriver je vzorec oblikovanja skladišča objektov.
- Objektni model strani selena ustvari našo preizkusno kodo, ki jo je mogoče vzdrževati in ponovno uporabiti.
- Page Factory je optimiziran način za ustvarjanje repozitorija predmetov v konceptu ogrodja Page Object Model.
- AjaxElementLocatorFactory je leni koncept nalaganja v Page Factory - vzorec oblikovanja predmetov strani za prepoznavanje WebElements le, kadar se uporabljajo v kateri koli operaciji.
V tej vadnici prenesite datoteke za projekt Selenium za predstavitev