Model objekta stranice (POM) & Tvornica stranica u vodiču za selen

Sadržaj:

Anonim

Što je objektni model stranice?

Model objekta stranice (POM) je obrazac dizajna, popularno korišten u automatizaciji ispitivanja koji stvara Object Repository za web elemente korisničkog sučelja. Prednost modela je što smanjuje dupliciranje koda i poboljšava održavanje testa.

Prema ovom modelu, za svaku web stranicu u aplikaciji trebala bi postojati odgovarajuća klasa stranice. Ova klasa Stranica identificirat će WebElements te web stranice i također sadrži metode stranice koje izvode operacije na tim WebElementsima. Naziv ovih metoda treba dati prema zadatku koji obavljaju, tj. Ako loader čeka da se pojavi gateway za plaćanje, naziv metode POM može biti waitForPaymentScreenDisplay ().

U ovom vodiču naučit ćete-

  • Zašto objektni model stranice?
  • Prednosti POM-a
  • Kako implementirati POM?
  • Što je Page Factory?
  • Guru99 TestCase s konceptom Page Factory
  • AjaxElementLocatorFactory

Zašto objektni model stranice?

Pokretanje automatizacije korisničkog sučelja u programu Selenium WebDriver NIJE težak zadatak. Samo trebate pronaći elemente, izvršiti operacije na njima.

Razmotrite ovu jednostavnu skriptu za prijavu na web mjesto

Kao što možete primijetiti, sve što radimo je pronalaženje elemenata i popunjavanje vrijednosti za te elemente.

Ovo je mala skripta. Održavanje skripti izgleda lako. Ali s vremenom će paket za testiranje rasti. Kako u kod dodajete sve više redaka, stvari postaju teške.

Glavni problem održavanja skripti je taj da ako 10 različitih skripti koristi isti element stranice, uz bilo kakvu promjenu u tom elementu, morate promijeniti svih 10 skripti. Ovo je dugotrajno i sklono pogreškama.

Bolji pristup održavanju skripti je stvaranje zasebne datoteke klase koja će pronaći web elemente, ispuniti ih ili provjeriti. Ova se klasa može ponovno koristiti u svim skriptama pomoću tog elementa. U budućnosti, ako dođe do promjene u web elementu, trebamo izvršiti promjenu u samo 1 datoteci razreda, a ne u 10 različitih skripti.

Ovaj pristup naziva se Page Objektni model u selenu. Pomaže da se kôd učini čitljivijim, održivijim i ponovljivim.

Prednosti POM-a

  1. Uzorak dizajna objekta stranice kaže da operacije i tokovi u korisničkom sučelju trebaju biti odvojeni od provjere. Ovaj koncept čini naš kod čišćim i lako razumljivim.
  2. Druga je prednost što je spremište objekata neovisno o testnim slučajevima, tako da isto spremište objekata možemo koristiti u različite svrhe s različitim alatima. Na primjer, možemo integrirati Page Object Model u selenu s TestNG / JUnit za funkcionalno testiranje i istovremeno s JBehave / Cucumber za ispitivanje prihvaćanja.
  3. Kôd postaje manje i optimiziran zbog metoda stranica koje se mogu ponovno koristiti u POM klasama.
  4. Metode dobivaju realističnija imena koja se lako mogu mapirati s operacijom koja se događa u korisničkom sučelju. tj. ako nakon klika na gumb sletimo na početnu stranicu, naziv metode bit će poput 'gotoHomePage ()'.

Kako implementirati POM?

Jednostavni POM:

To je osnovna struktura okvira objektnog modela stranice gdje se svi web elementi AUT- a i metoda koja djeluje na tim web elementima održavaju unutar datoteke klase. Zadatak poput provjere trebao bi biti odvojen kao dio metoda ispitivanja.

Potpuni primjer

TestCase: Idite na demo stranicu Guru99.

Korak 1) Idite na demo stranicu Guru99
Korak 2) U početnu stranicu potvrdni tekstu „Guru99 Banka” je prisutan
Korak 3) Prijavite se u aplikaciju
Korak 4) Provjerite sadrži li početna stranica tekst kao "Manger Id: demo"

Ovdje imamo posla s 2 stranice

  1. Stranica za prijavu
  2. Početna stranica (prikazuje se nakon prijave)

U skladu s tim stvaramo 2 POM u razredima Selenium

Stranica za prijavu Guru99 POM

stranice paketa;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;javna klasa Guru99Login {Upravljački program za WebDriver;Od user99GuruName = By.name ("uid");Po lozinci99Guru = By.name ("lozinka");Prema titleText = By.className ("barone");Prijavom = By.name ("btnLogin");javni Guru99Login (upravljački program za WebDriver) {this.driver = upravljački program;}// Postavljanje korisničkog imena u okvir za tekstjavna praznina setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Postavljanje lozinke u okvir za tekst lozinkejavna praznina setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Kliknite gumb za prijavupublic void clickLogin () {driver.findElement (prijava) .click ();}// Dobiti naslov stranice za prijavujavni String getLoginTitle () {povratak driver.findElement (titleText) .getText ();}/ *** Ova POM metoda bit će izložena u testnom slučaju za prijavu u aplikaciju* @param strUserName* @param strPasword* @povratak* /public void loginToGuru99 (String strUserName, String strPasword) {// Ispunite korisničko imethis.setUserName (strUserName);// Ispunite lozinkuthis.setPassword (strPasword);// Kliknite gumb Prijavathis.clickLogin ();}}

Početna stranica Guru99 POM u selenu

stranice paketa;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;javna klasa Guru99HomePage {Upravljački program za WebDriver;Po homePageUserName = By.xpath ("// tablica // tr [@ class = 'heading3']");javni Guru99HomePage (upravljački program za WebDriver) {this.driver = upravljački program;}// Dohvatite korisničko ime s početne stranicejavni niz getHomePageDashboardUserName () {povratak driver.findElement (homePageUserName) .getText ();}}

Guru99 Jednostavni POM u testnom slučaju selena

test paketa;import 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;stranice za uvoz.Guru99HomePage;stranice za uvoz.Guru99Login;javna klasa Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Upravljački program za WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpostavljanje javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ovaj testni slučaj prijavit će se na http://demo.guru99.com/V4/* Potvrdite naslov stranice za prijavu kao guru99 bank* Prijava u prijavu* Potvrdite početnu stranicu pomoću poruke nadzorne ploče* /@Test (prioritet = 0)javna praznina test_Home_Page_Appear_Correct () {// Stvori objekt prijave straniceobjLogin = novi Guru99Login (pokretački program);// Provjera naslova stranice za prijavuNiz loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Sadrži ("guru99 banka"));// prijava u aplikacijuobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// idite na sljedeću stranicuobjHomePage = novi Guru99HomePage (upravljački program);// Potvrda početne straniceAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Sadrži ("id jaslice: mgr123"));}

Što je tvornica stranica u selenu?

Page Factory u Seleniju je ugrađeni koncept okvirnog modela objektnog modela stranice za Selenium WebDriver, ali je vrlo optimiziran. Koristi se za inicijalizaciju objekata Page ili za instanciranje samog objekta Page. Također se koristi za inicijalizaciju elemenata klase stranice bez upotrebe "FindElement / s".

I ovdje slijedimo koncept razdvajanja spremišta predmeta stranica i metoda ispitivanja. Uz to, uz pomoć klase PageFactory u Seleniju, koristimo napomene @FindBy za pronalaženje WebElementa. Za inicijalizaciju web elemenata koristimo metodu initElements

@FindBy može kao atribute prihvatiti tagName, djelomičniLinkText, name, linkText, id, css, className, xpath .

Pogledajmo isti primjer kao gore koristeći Factory Factory

Stranica za prijavu Guru99 s tvornicom stranica

paket PageFactory;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;javna klasa Guru99Login {/ *** Svi WebElements prepoznati su oznakom @FindBy* /Upravljački program za WebDriver;@FindBy (name = "uid")WebElement user99GuruName;@FindBy (name = "lozinka")Lozinka za WebElement99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")Prijava na WebElement;javni Guru99Login (upravljački program za WebDriver) {this.driver = upravljački program;// Ova metoda initElements stvorit će sve WebElementePageFactory.initElements (pokretački program, ovo);}// Postavljanje korisničkog imena u okvir za tekstjavna praznina setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// Postavljanje lozinke u okvir za tekst lozinkejavna praznina setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Kliknite gumb za prijavupublic void clickLogin () {login.click ();}// Dobiti naslov stranice za prijavujavni String getLoginTitle () {vrati titleText.getText ();}/ *** Ova POM metoda bit će izložena u testnom slučaju za prijavu u aplikaciju* @param strUserName* @param strPasword* @povratak* /public void loginToGuru99 (String strUserName, String strPasword) {// Ispunite korisničko imethis.setUserName (strUserName);// Ispunite lozinkuthis.setPassword (strPasword);// Kliknite gumb Prijavathis.clickLogin ();}}

Početna stranica Guru99 s tvornicom stranica

paket PageFactory;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;javna klasa Guru99HomePage {Upravljački program za WebDriver;@FindBy (xpath = "// tablica // tr [@ class = 'heading3']")WebElement homePageUserName;javni Guru99HomePage (upravljački program za WebDriver) {this.driver = upravljački program;// Ova metoda initElements stvorit će sve WebElementePageFactory.initElements (pokretački program, ovo);}// Dohvatite korisničko ime s početne stranicejavni niz getHomePageDashboardUserName () {povratak homePageUserName.getText ();}}

Guru99 TestCase s konceptom Page Factory

test paketa;import 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;javna klasa Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Upravljački program za WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpostavljanje javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ovaj test idite na http://demo.guru99.com/V4/* Potvrdite naslov stranice za prijavu kao guru99 bank* Prijava u prijavu* Potvrdite početnu stranicu pomoću poruke nadzorne ploče* /@Test (prioritet = 0)javna praznina test_Home_Page_Appear_Correct () {// Stvori objekt prijave straniceobjLogin = novi Guru99Login (pokretački program);// Provjera naslova stranice za prijavuNiz loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Sadrži ("guru99 banka"));// prijava u aplikacijuobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// idite na sljedeću stranicuobjHomePage = novi Guru99HomePage (upravljački program);// Potvrda početne straniceAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Sadrži ("id jaslice: mgr123"));}}

Kompletna struktura projekta izgledat će poput dijagrama:

AjaxElementLocatorFactory

AjaxElementLocatorFactory je lijeni koncept učitavanja PageFactory u selenu. Koristi se za pronalaženje mrežnih elemenata samo kada se elementi koriste u bilo kojoj operaciji. Klasi objektne stranice dodjeljuje vremensko ograničenje za WebElements. Jedna od ključnih prednosti korištenja uzorka PageFactory u Seleniju je AjaxElementLocatorFactory Class.

Ovdje, kada se izvodi operacija na elementu, čekanje na njegovu vidljivost započinje tek od tog trenutka. Ako element nije pronađen u zadanom vremenskom intervalu, izvršenje test slučaja izbacit će iznimku 'NoSuchElementException'.

Sažetak

  1. Model predmeta stranice u programu Selenium Websdriver uzorak je dizajna spremišta objekata.
  2. Objektni model stranice selenium stvara naš testni kôd koji se može održavati i može se ponovno koristiti.
  3. Page Factory je optimiziran način za stvaranje spremišta objekata u konceptu okvira za model objektnog modela stranice.
  4. AjaxElementLocatorFactory je lijeni koncept učitavanja u Page Factory - obrazac dizajna objekata stranice kako bi se identificirali WebElements samo kada se koriste u bilo kojoj operaciji.

U ovom vodiču preuzmite datoteke projekta Selenium za demonstraciju