Puslapio objekto modelis (POM) & Puslapių gamykla „Selenium“ pamokoje

Turinys:

Anonim

Kas yra puslapio objekto modelis?

Puslapio objekto modelis (POM) yra dizaino modelis, populiariai naudojamas bandymų automatizavime, sukuriantis žiniatinklio vartotojo sąsajos elementų objektų saugyklą. Modelio privalumas yra tas, kad jis sumažina kodų dubliavimąsi ir pagerina bandymų priežiūrą.

Pagal šį modelį kiekvienam programos tinklalapiui turėtų būti atitinkama puslapių klasė. Ši puslapių klasė identifikuos to tinklalapio žiniatinklio elementus, taip pat yra puslapių metodai, atliekantys operacijas tose žiniatinklio svetainėse. Šių metodų pavadinimas turėtų būti nurodytas pagal jų atliekamą užduotį, ty, jei krautuvas laukia, kol pasirodys mokėjimo šliuzas, POM metodo pavadinimas gali būti waitForPaymentScreenDisplay ().

Šioje pamokoje sužinosite

  • Kodėl puslapio objekto modelis?
  • POM privalumai
  • Kaip įgyvendinti POM?
  • Kas yra „Page Factory“?
  • „Guru99 TestCase“ su „Page Factory“ koncepcija
  • „AjaxElementLocatorFactory“

Kodėl puslapio objekto modelis?

Vartotojo sąsajos automatikos paleidimas „Selenium WebDriver“ NĖRA sunki užduotis. Jums tiesiog reikia rasti elementus, atlikti su juo operacijas.

Apsvarstykite šį paprastą scenarijų, norėdami prisijungti prie svetainės

Kaip galite pastebėti, viskas, ką darome, yra elementų paieška ir tų elementų užpildymo vertės.

Tai nedidelis scenarijus. Scenarijų priežiūra atrodo lengva. Tačiau laikui bėgant testų rinkinys augs. Kai prie kodo pridedate vis daugiau eilučių, viskas tampa sunku.

Pagrindinė scenarijų priežiūros problema yra ta, kad jei 10 skirtingų scenarijų naudoja tą patį puslapio elementą, su bet kokiu šio elemento pakeitimu, turite pakeisti visus 10 scenarijų. Tai užima daug laiko ir turi klaidų.

Geresnis scenarijų priežiūros būdas yra sukurti atskirą klasės failą, kuris rastų, užpildytų ar patikrintų žiniatinklio elementus. Ši klasė gali būti pakartotinai naudojama visuose scenarijuose, naudojant tą elementą. Ateityje, jei pasikeis žiniatinklio elementas, pakeitimą turėsime atlikti tik 1 klasės faile, o ne 10 skirtingų scenarijų.

Šis metodas vadinamas „Page Object Model in Selenium“. Tai padeda padaryti kodą labiau įskaitomą, prižiūrimą ir daugkartinį.

POM privalumai

  1. Puslapio objekto dizaino šablonas sako, kad vartotojo sąsajos operacijos ir srautai turėtų būti atskirti nuo patikrinimo. Ši koncepcija daro mūsų kodą švaresnį ir lengvai suprantamą.
  2. Antroji nauda yra tai, kad objektų saugykla nepriklauso nuo bandymų atvejų, todėl tą patį objektų saugyklą galime naudoti skirtingiems tikslams, naudodami skirtingus įrankius. Pavyzdžiui, mes galime integruoti „Selenium“ puslapio objekto modelį su „TestNG / JUnit“ funkciniam testavimui ir tuo pačiu metu su „JBehave / Cucumber“ priėmimo testavimui.
  3. Kodas tampa mažesnis ir optimizuojamas dėl daugkartinio naudojimo puslapių metodų POM klasėse.
  4. Metodai gauna tikroviškesnius pavadinimus, kuriuos galima lengvai susieti su sąsaja. ty jei spustelėjus mygtuką pateksime į pagrindinį puslapį, metodo pavadinimas bus panašus į „gotoHomePage ()“.

Kaip įgyvendinti POM?

Paprastas POM:

Tai yra pagrindinė „Page“ objekto modelio struktūros struktūra, kai visi „ AUT“ žiniatinklio elementai ir šiuose žiniatinklio elementuose veikiantis metodas yra palaikomi klasės faile. Tokia užduotis kaip patikra turėtų būti atskira kaip bandymo metodų dalis.

Pilnas pavyzdys

„TestCase“: eikite į „Guru99“ demonstracinę svetainę.

1 žingsnis) Eikite į „Guru99“ demonstracinę svetainę
2 žingsnis) Pradinis puslapis žymės tekstą "Guru99 bankas" yra dabar
3 žingsnis) Prisijunkite prie programos
4 žingsnis) Patikrinkite, ar pagrindiniame puslapyje yra teksto kaip „Manger Id: demo“

Čia mes turime 2 puslapius

  1. Prisijungimo puslapis
  2. Pagrindinis puslapis (rodomas prisijungus)

Atitinkamai mes sukuriame 2 POM seleno klasėse

„Guru99“ prisijungimo puslapis POM

pakuočių puslapiai;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;viešoji klasė „Guru99Login“„WebDriver“ tvarkyklė;Pagal vartotojo99GuruName = By.name ("uid");Pagal slaptažodį99Guru = By.name ("slaptažodis");Pagal titleText = By.clNAME ("baronas");Pagal prisijungimą = By.name ("btnLogin");public Guru99Login („WebDriver“ tvarkyklė) {this.driver = tvarkyklė;}// Nustatykite vartotojo vardą teksto laukelyjepublic void setUserName (eilutė strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Nustatykite slaptažodį slaptažodžio teksto laukelyjepublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Spustelėkite prisijungimo mygtukąpublic void clickLogin () {vairuotojas.findElement (prisijungti) .spustelėkite ();}// Gaukite prisijungimo puslapio pavadinimąviešoji eilutė getLoginTitle () {grąžinti vairuotoją.findElement (titleText) .getText ();}/ *** Šis POM metodas bus išbandytas, jei norite prisijungti prie programos* @param strUserName* @param strPasword* @grįžti* /public void loginToGuru99 (String strUserName, String strPasword) {// Užpildykite vartotojo vardąthis.setUserName (strUserName);// Užpildykite slaptažodįthis.setPassword (strPasword);// Spustelėkite mygtuką Prisijungtithis.spustelėkite Prisijungti ();}}

„Guru99“ pagrindinis puslapis POM selene

pakuočių puslapiai;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;viešoji klasė „Guru99HomePage“ {„WebDriver“ tvarkyklė;By homePageUserName = By.xpath ("// lentelė // tr [@ class = 'title3']");public Guru99HomePage („WebDriver“ tvarkyklė) {this.driver = tvarkyklė;}// Gaukite vartotojo vardą iš pagrindinio puslapioviešoji eilutė getHomePageDashboardUserName () {grąžinti tvarkyklę.findElement (homePageUserName) .getText ();}}

„Guru99“ paprastas POM seleno bandymo atveju

paketo testas;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.Assert;importuoti org.testng.annotations.BeforeTest;importuoti org.testng.annotations.Test;importuoti puslapius.Guru99HomePage;importuoti puslapius.Guru99Login;viešoji klasė Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";„WebDriver“ tvarkyklė;„Guru99Login objLogin“;Guru99HomePage objHomePage;@BeforeTestpublic void sąranka () {System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get („http://demo.guru99.com/V4/“);}/ *** Šis bandomasis atvejis prisijungs http://demo.guru99.com/V4/* Patikrinkite prisijungimo puslapio pavadinimą kaip „guru99“ banką* Prisijunkite prie programos* Patikrinkite pagrindinį puslapį naudodami informacijos suvestinės pranešimą* /@Test (prioritetas = 0)public void test_Home_Page_Appear_Correct () {// Sukurti prisijungimo puslapio objektąobjLogin = naujas „Guru99Login“ (tvarkyklė);// Patikrinkite prisijungimo puslapio pavadinimąString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Yra („guru99 bankas“));// prisijunkite prie programosobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// pereiti į kitą puslapįobjHomePage = naujas „Guru99HomePage“ (tvarkyklė);// Patikrinkite pagrindinį puslapį„Assert.assertTrue“ (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Yra („ėdžios ID: mgr123“));}

Kas yra puslapių gamykla selene?

„Selenium“ puslapių gamykla yra integruota „Selenium WebDriver“ puslapio objekto modelio koncepcija, tačiau ji yra labai optimizuota. Jis naudojamas puslapių objektams inicializuoti arba pačiam puslapio objektui eksponuoti. Jis taip pat naudojamas inicializuoti puslapio klasės elementus nenaudojant „FindElement / s“.

Čia taip pat vadovaujamės puslapio objektų saugyklos ir bandymo metodų atskyrimo koncepcija. Be to, naudodamiesi „PageFactory“ seleno klasėje, mes naudojame „ @FindBy“ anotacijas, kad rastume „WebElement“. Inicijuodami žiniatinklio elementus naudojame „initElements“ metodą

@FindBy kaip atributus gali priimti tagName, particLinkText, name, linkText, id, css, className, xpath .

Pažvelkime į tą patį pavyzdį, kaip nurodyta aukščiau, naudojant „Page Factory“

„Guru99“ prisijungimo puslapis su „Page Factory“

paketas „PageFactory“;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.support.FindBy;importuoti org.openqa.selenium.support.PageFactory;viešoji klasė „Guru99Login“/ *** Visos „WebElements“ yra identifikuojamos pagal @FindBy anotaciją* /„WebDriver“ tvarkyklė;@FindBy (vardas = "uid")„WebElement“ vartotojas99GuruName;@FindBy (vardas = "slaptažodis")„WebElement“ slaptažodis99Guru;@FindBy (className = "baronas")„WebElement titleText“;@FindBy (vardas = "btnLogin")„WebElement“ prisijungimas;public Guru99Login („WebDriver“ tvarkyklė) {this.driver = tvarkyklė;// Šis „initElements“ metodas sukurs visas „WebElements“PageFactory.initElements (tvarkyklė, tai);}// Nustatykite vartotojo vardą teksto laukelyjepublic void setUserName (eilutė strUserName) {user99GuruName.sendKeys (strUserName);}// Nustatykite slaptažodį slaptažodžio teksto laukelyjepublic void setPassword (String strPassword) {slaptažodis99Guru.sendKeys (strPassword);}// Spustelėkite prisijungimo mygtukąpublic void clickLogin () {prisijunkite.spustelėkite ();}// Gaukite prisijungimo puslapio pavadinimąviešoji eilutė getLoginTitle () {grąžinti titleText.getText ();}/ *** Šis POM metodas bus išbandytas, jei norite prisijungti prie programos* @param strUserName* @param strPasword* @grįžti* /public void loginToGuru99 (String strUserName, String strPasword) {// Užpildykite vartotojo vardąthis.setUserName (strUserName);// Užpildykite slaptažodįthis.setPassword (strPasword);// Spustelėkite mygtuką Prisijungtithis.spustelėkite Prisijungti ();}}

Pagrindinis „Guru99“ puslapis su puslapių gamykla

paketas „PageFactory“;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.support.FindBy;importuoti org.openqa.selenium.support.PageFactory;viešoji klasė „Guru99HomePage“ {„WebDriver“ tvarkyklė;@FindBy (xpath = "// lentelė // tr [@ class = 'title3']")„WebElement“ homePageUserName;public Guru99HomePage („WebDriver“ tvarkyklė) {this.driver = tvarkyklė;// Šis „initElements“ metodas sukurs visas „WebElements“PageFactory.initElements (tvarkyklė, tai);}// Gaukite vartotojo vardą iš pagrindinio puslapioviešoji eilutė getHomePageDashboardUserName () {grįžti namoPageUserName.getText ();}}

„Guru99 TestCase“ su „Page Factory“ koncepcija

paketo testas;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.Assert;importuoti org.testng.annotations.BeforeTest;importuoti org.testng.annotations.Test;importuoti „PageFactory.Guru99HomePage“;importuoti „PageFactory.Guru99Login“;public class Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";„WebDriver“ tvarkyklė;„Guru99Login objLogin“;Guru99HomePage objHomePage;@BeforeTestpublic void sąranka () {System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get („http://demo.guru99.com/V4/“);}/ *** Šis testas eikite į http://demo.guru99.com/V4/* Patikrinkite prisijungimo puslapio pavadinimą kaip „guru99“ banką* Prisijunkite prie programos* Patikrinkite pagrindinį puslapį naudodami informacijos suvestinės pranešimą* /@Test (prioritetas = 0)public void test_Home_Page_Appear_Correct () {// Sukurti prisijungimo puslapio objektąobjLogin = naujas „Guru99Login“ (tvarkyklė);// Patikrinkite prisijungimo puslapio pavadinimąString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Yra („guru99 bankas“));// prisijunkite prie programosobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// pereiti į kitą puslapįobjHomePage = naujas „Guru99HomePage“ (tvarkyklė);// Patikrinkite pagrindinį puslapį„Assert.assertTrue“ (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Yra („ėdžios ID: mgr123“));}}

Visa projekto struktūra atrodys kaip schema:

„AjaxElementLocatorFactory“

„AjaxElementLocatorFactory“ yra tingus „PageFactory“ seleno įkėlimo konceptas. Jis naudojamas žiniatinklio elementams rasti tik tada, kai elementai naudojami bet kurioje operacijoje. Tai priskiria „WebElements“ skirtąjį laiką objekto puslapio klasei. Vienas iš pagrindinių „PageFactory“ modelio naudojimo selene privalumų yra „AjaxElementLocatorFactory“ klasė.

Čia, kai atliekama elemento operacija, laukiama jo matomumo tik nuo to momento. Jei elementas nerastas nurodytu laiko intervalu, vykdant bandomąjį atvejį bus išimtis „NoSuchElementException“.

Santrauka

  1. „Selenium Websdriver“ puslapio objektų modelis yra objektų saugyklos dizaino modelis.
  2. Seleno puslapio objekto modelis sukuria mūsų testavimo kodą prižiūrimą, daugkartinį.
  3. „Page Factory“ yra optimizuotas būdas sukurti objektų saugyklą „Page Object Model“ sistemos koncepcijoje.
  4. „AjaxElementLocatorFactory“ yra tingus „Page Factory“ puslapio objektų dizaino šablono įkėlimo principas, skirtas „WebElement“ identifikuoti tik tada, kai jie naudojami bet kurioje operacijoje.

Šioje pamokoje atsisiųskite „Selenium“ projekto failus, skirtus demonstracijai