Ce este modelul de obiect de pagină?
Modelul de obiecte de pagină (POM) este un model de proiectare, utilizat în mod popular în automatizarea testelor care creează depozit de obiecte pentru elementele de interfață web. Avantajul modelului este că reduce duplicarea codului și îmbunătățește întreținerea testelor.
Conform acestui model, pentru fiecare pagină web din aplicație ar trebui să existe o clasă de pagină corespunzătoare. Această clasă de pagină va identifica elementele Web ale acelei pagini web și conține, de asemenea, metode de pagină care efectuează operații pe aceste elemente Web. Numele acestor metode ar trebui să fie date în funcție de sarcina pe care o efectuează, adică, dacă un încărcător așteaptă să apară gateway-ul de plată, numele metodei POM poate fi waitForPaymentScreenDisplay ().
În acest tutorial, veți învăța-
- De ce model de obiect de pagină?
- Avantajele POM
- Cum se implementează POM?
- Ce este Page Factory?
- Guru99 TestCase cu conceptul Page Factory
- AjaxElementLocatorFactory
De ce model de obiect de pagină?
Lansarea unei automatizări UI în Selenium WebDriver NU este o sarcină dificilă. Trebuie doar să găsiți elemente, să efectuați operațiuni pe el.
Luați în considerare acest script simplu pentru a vă conecta la un site web
După cum puteți observa, tot ceea ce facem este să găsim elemente și să completăm valorile pentru aceste elemente.
Acesta este un mic script. Întreținerea scriptului arată ușor. Dar cu timpul suita de testare va crește. Pe măsură ce adăugați din ce în ce mai multe linii la cod, lucrurile devin dificile.
Problema principală cu întreținerea scriptului este că, dacă 10 scripturi diferite utilizează același element de pagină, cu orice modificare a acelui element, trebuie să schimbați toate cele 10 scripturi. Aceasta consumă timp și este predispusă la erori.
O abordare mai bună pentru întreținerea scriptului este crearea unui fișier de clasă separat care să găsească elemente web, să le completeze sau să le verifice. Această clasă poate fi reutilizată în toate scripturile care utilizează acel element. În viitor, dacă există o modificare a elementului web, trebuie să facem modificarea doar într-un fișier de clasă și nu în 10 scripturi diferite.
Această abordare se numește Model de obiecte de pagină în seleniu. Vă ajută să faceți codul mai lizibil, mai ușor de întreținut și reutilizat.
Avantajele POM
- Modelul de proiectare a obiectelor de pagină spune că operațiunile și fluxurile din interfața de utilizare ar trebui separate de verificare. Acest concept ne face codul mai curat și ușor de înțeles.
- Al doilea beneficiu este că depozitul de obiecte este independent de cazurile de testare, deci putem folosi același depozit de obiecte pentru un scop diferit cu instrumente diferite. De exemplu, putem integra Page Object Model în Selenium cu TestNG / JUnit pentru testarea funcțională și în același timp cu JBehave / Cucumber pentru testarea acceptării.
- Codul devine mai puțin și optimizat datorită metodelor de pagină reutilizabile din clasele POM.
- Metodele obțin nume mai realiste care pot fi mapate cu ușurință cu operația care se întâmplă în interfața de utilizare. adică dacă după ce facem clic pe buton aterizăm pe pagina principală, numele metodei va fi ca „gotoHomePage ()”.
Cum se implementează POM?
POM simplu:
Este structura de bază a cadrului modelului de obiecte Page, unde toate elementele web ale AUT și metoda care funcționează pe aceste elemente web sunt menținute într-un fișier de clasă. O sarcină precum verificarea ar trebui să fie separată ca parte a metodelor de testare.
Exemplu complet
TestCase: accesați site-ul demonstrativ Guru99.
Pasul 1) Accesați site-ul Guru99 Demo | |
Pasul 2) În pagina de pornire textul de verificare „Guru99 Bank” este prezent | |
Pasul 3) Conectați-vă la aplicație | |
Pasul 4) Verificați dacă pagina de pornire conține text ca „ID-ul managerului: demo” |
Iată că avem de-a face cu 2 pagini
- Pagina de logare
- Pagina principală (afișată după ce vă autentificați)
În consecință, creăm 2 POM în clasele de seleniu
Guru99 Pagina de autentificare POM
pagini de pachet;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class Guru99Login {Driver WebDriver;By user99GuruName = By.name ("uid");By password99Guru = By.name („parolă”);După titleText = By.className ("barone");By login = By.name ("btnLogin");public Guru99Login (driver WebDriver) {this.driver = driver;}// Setați numele de utilizator în caseta de textpublic void setUserName (String StrUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Setați parola în caseta de text pentru parolăpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Faceți clic pe butonul de autentificarepublic void clickLogin () {driver.findElement (login) .click ();}// Obțineți titlul de Pagina de autentificarepublic String getLoginTitle () {returnează driver.findElement (titleText) .getText ();}/ *** Această metodă POM va fi expusă în caz de testare pentru a vă autentifica în aplicație* @param strUserName* @param strPasword* @întoarcere* /public void loginToGuru99 (String StrUserName, String strPasword) {// Completați numele de utilizatorthis.setUserName (strUserName);// Completați parolathis.setPassword (strPasword);// Faceți clic pe butonul Conectarethis.clickLogin ();}}
Pagina principală Guru99 POM în seleniu
pagini de pachet;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class Guru99HomePage {Driver WebDriver;By homePageUserName = By.xpath ("// tabel // tr [@ class = 'heading3']");public Guru99HomePage (driver WebDriver) {this.driver = driver;}// Obțineți numele de utilizator din pagina principalăpublic String getHomePageDashboardUserName () {returnează driver.findElement (homePageUserName) .getText ();}}
Guru99 POM simplu în cazul testului de seleniu
test pachet;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;pagini de import.Guru99HomePage;pagini de import.Guru99Login;public class Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Driver WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestconfigurare public nul () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = nou FirefoxDriver ();driver.manage (). timeouts (). implicit Așteptați (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Acest caz de testare se va conecta la http://demo.guru99.com/V4/* Verificați titlul paginii de conectare ca bancă guru99* Conectați-vă la aplicație* Verificați pagina de pornire folosind mesajul Dashboard* /@Test (prioritate = 0)public void test_Home_Page_Appear_Correct () {// Creați obiect pagina de autentificareobjLogin = nou Guru99Login (driver);// Verificați titlul paginii de conectareString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Conține ("banca guru99"));// autentificare la aplicațieobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// treceți la pagina următoareobjHomePage = new Guru99HomePage (driver);// Verificați pagina de pornireAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contine ("id manger: mgr123"));}
Ce este Fabrica de pagini în seleniu?
Fabrica de pagini din Selenium este un concept de cadru de model de obiecte de pagină încorporat pentru Selenium WebDriver, dar este foarte optimizat. Este utilizat pentru inițializarea obiectelor de pagină sau pentru a crea instantaneu obiectul de pagină în sine. De asemenea, este utilizat pentru inițializarea elementelor clasei de pagină fără a utiliza „FindElement / s”.
Și aici urmărim conceptul de separare a depozitului de obiecte de pagină și a metodelor de testare. În plus, cu ajutorul clasei PageFactory din Selenium, folosim adnotări @FindBy pentru a găsi WebElement. Folosim metoda initElements pentru a inițializa elemente web
@FindBy poate accepta tagName, partialLinkText, name, linkText, id, css, className, xpath ca atribute.
Să vedem același exemplu ca mai sus folosind Page Factory
Pagina de autentificare Guru99 cu Page Factory
pachet PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;public class Guru99Login {/ *** Toate elementele Web sunt identificate prin adnotare @FindBy* /Driver WebDriver;@FindBy (name = "uid")WebElement user99GuruName;@FindBy (nume = "parolă")Parola WebElement99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")Autentificare WebElement;public Guru99Login (driver WebDriver) {this.driver = driver;// Această metodă initElements va crea toate WebElementsPageFactory.initElements (driver, acesta);}// Setați numele de utilizator în caseta de textpublic void setUserName (String StrUserName) {user99GuruName.sendKeys (strUserName);}// Setați parola în caseta de text pentru parolăpublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Faceți clic pe butonul de autentificarepublic void clickLogin () {login.click ();}// Obțineți titlul de Pagina de autentificarepublic String getLoginTitle () {returnează titleText.getText ();}/ *** Această metodă POM va fi expusă în caz de testare pentru a vă autentifica în aplicație* @param strUserName* @param strPasword* @întoarcere* /public void loginToGuru99 (String StrUserName, String strPasword) {// Completați numele de utilizatorthis.setUserName (strUserName);// Completați parolathis.setPassword (strPasword);// Faceți clic pe butonul Conectarethis.clickLogin ();}}
Pagina principală Guru99 cu Fabrica de pagini
pachet PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;public class Guru99HomePage {Driver WebDriver;@FindBy (xpath = "// table // tr [@ class = 'heading3']")WebElement homePageUserName;public Guru99HomePage (driver WebDriver) {this.driver = driver;// Această metodă initElements va crea toate WebElementsPageFactory.initElements (driver, acesta);}// Obțineți numele de utilizator din pagina principalăpublic String getHomePageDashboardUserName () {intoarce homePageUserName.getText ();}}
Guru99 TestCase cu conceptul Page Factory
test pachet;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;importă PageFactory.Guru99HomePage;importați PageFactory.Guru99Login;public class Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Driver WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestconfigurare public nul () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = nou FirefoxDriver ();driver.manage (). timeouts (). implicit Așteptați (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Acest test accesați http://demo.guru99.com/V4/* Verificați titlul paginii de conectare ca bancă guru99* Conectați-vă la aplicație* Verificați pagina de pornire folosind mesajul Dashboard* /@Test (prioritate = 0)public void test_Home_Page_Appear_Correct () {// Creați obiect pagina de autentificareobjLogin = nou Guru99Login (driver);// Verificați titlul paginii de conectareString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Conține ("banca guru99"));// autentificare la aplicațieobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// treceți la pagina următoareobjHomePage = new Guru99HomePage (driver);// Verificați pagina de pornireAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contine ("id manger: mgr123"));}}
Structura completă a proiectului va arăta ca diagrama:
AjaxElementLocatorFactory
AjaxElementLocatorFactory este un concept leneș de încărcare a PageFactory în seleniu. Este folosit pentru a găsi elementele web numai atunci când elementele sunt utilizate în orice operație. Atribuie un timeout pentru WebElements clasei de pagini obiect. Unul dintre avantajele cheie ale utilizării modelului PageFactory în Selenium este clasa AjaxElementLocatorFactory.
Aici, când se efectuează o operație pe un element, așteptarea vizibilității sale începe doar din acel moment. Dacă elementul nu este găsit în intervalul de timp dat, execuția Test Case va arunca excepția „NoSuchElementException”.
rezumat
- Modelul de obiecte de pagină din Selenium Websdriver este un model de proiectare a depozitului de obiecte.
- Modelul de obiecte de pagină Selenium creează codul nostru de testare care poate fi menținut, reutilizat.
- Page Factory este un mod optimizat de a crea depozit de obiecte în conceptul de cadru Model de obiecte de pagină.
- AjaxElementLocatorFactory este un concept de încărcare leneșă în Page Factory - model de proiectare a obiectelor de pagină pentru a identifica WebElements numai atunci când sunt utilizate în orice operație.
Descărcați fișierele proiectului Selenium pentru demonstrație în acest tutorial