page object model selenium without using page factory
Modelul de obiecte de pagină (POM) este un model de proiectare pentru menținerea depozitului de obiecte pentru elementele web. Acest tutorial explică cum să implementați POM în seleniu fără fabrică de pagini:
Proiectul de automatizare script trebuie să fie conceput în așa fel încât să fie optimizat și mai ușor de înțeles. Acest lucru se realizează folosind POM care urmează anumite linii directoare pentru a proiecta un cadru.
Vom afla mai multe despre:
- Ce este POM?
- Avantajele utilizării POM într-un proiect
- Cum se creează un POM de bază fără a utiliza Page Factory Approach?
=> Vizitați aici pentru seria exclusivă de instruire pentru seleniu.
Ce veți învăța:
Model de obiect de pagină fără fabrică de pagini
Page Object Model este un model de proiectare care este utilizat pentru a menține depozitul de obiecte pentru elementele web. Aici, toate elementele web și metodele lor corespunzătoare sunt menținute într-o clasă separată pentru fiecare pagină web. Prin urmare, chiar și o singură modificare a atributului unui WebElement se va reflecta în toate cazurile de testare oriunde este utilizat. În acest fel, îmbunătățește întreținerea mai ușoară a depozitului de obiecte.
Modelul de obiecte de pagină este cel mai bun atunci când este utilizat pentru aplicații care au mai multe pagini sau stări.
Iată tutorialele video:
Partea I
Part II
Avantajele POM
Mai jos sunt câteva avantaje ale POM:
- Este mai ușor să întrețineți codul. Orice modificare a interfeței utilizatorului va reflecta oriunde este utilizată în clasă.
- Robust și face codul lizibil (metodele au nume mai realiste).
- Face codul reutilizabil și reduce duplicarea codului (depozitul de obiecte este independent de cazurile de testare).
- Codul devine mai puțin optimizat.
Pași pentru a crea un POM fără modelul de fabrică a paginii
# 1) Creați o clasă Java pentru fiecare pagină din aplicație.
#Două) În fiecare clasă, declarați toate elementele web ca fiind variabile.
# 3) Implementați metode corespunzătoare care acționează asupra variabilelor.
Modelul de proiectare poate fi structurat folosind 2 straturi / pachete:
- Strat de pagină va deține paginile aplicației ca Java Class individuală. Fiecare clasă va avea elemente Web declarate ca variabile și acțiunile care sunt efectuate ca metode.
- Layer de testare va deține cazurile de test ale aplicației și partea de verificare a acesteia.
Să luăm un exemplu de scenariu simplu:
- Deschideți adresa URL a unei aplicații.
- Tastați adresa de e-mail și datele de parolă.
- Faceți clic pe butonul Login.
- Verificați mesajul de conectare reușit pe pagina de căutare.
Strat de pagină
Aici avem 2 pagini,
- Pagina principala : Pagina se deschide la introducerea adresei URL și aici introducem datele pentru autentificare.
- SearchPage : Pagina care se afișează după o autentificare reușită.
În stratul de pagină, fiecare pagină din aplicația web este declarată ca o clasă Java separată și localizatorii și acțiunile sale sunt menționate acolo.
Pași pentru a crea POM cu exemple în timp real
# 1) Creați o clasă Java pentru fiecare pagină:
In acest exemplu , vom accesa 2 pagini web, paginile „Acasă” și „Căutare”. Prin urmare, vom crea 2 clase Java în stratul de pagină (sau într-un pachet să spunem, com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Creați elemente web ca variabile:
ce este un schimbător de voce bun
Am interacționa cu:
- E-mail, parolă, câmp buton Autentificare pe HomePage.
- Un mesaj de succes în SearchPage.
Deci, vom crea WebElements ca variabile folosind clasa „By”.
De exemplu: Dacă e-mailul are xpath ca // div (conține (@id, ‘EmailId’)), atunci declarația sa variabilă este
// Locator pentru câmpul EmailId
Prin adresa de e-mail = By.xpath (// div (conține (@id, ‘EmailId’))))
# 3) Creați metode pentru acțiuni efectuate pe WebElements:
Mai jos sunt efectuate acțiuni pe WebElements:
- Tastați acțiune în câmpul Adresă e-mail.
- Tastați acțiune în câmpul Parolă.
- Faceți clic pe acțiune pe butonul Login.
De exemplu, Metodele definite de utilizator sunt create pentru fiecare acțiune pe WebElement ca,
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Aici, ID-ul este trecut ca parametru în metodă, deoarece intrarea va fi trimisă de utilizator din cazul principal de testare.
Notă :Trebuie creat un constructor pentru fiecare clasă din stratul de pagină pentru a obține instanța driverului din clasa principală din stratul de testare.
Nu inițiem driverul aici, mai degrabă instanța sa este primită de la clasa principală atunci când se creează obiectul clasei Page Layer.
Două clase Java sunt create pentru fiecare pagină, după cum se arată mai jos:
HomePage.java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class HomePage { WebDriver driver; // Locator for Email Address By EmailAddress = By.xpath('//div(contains(@id,'Emaild'))'); // Locator for Password field By Password= By.xpath('//div(contains(@id,'Password'))'); // Locator for SignIn Button By SignInButton= By.xpath('//div(contains(@id,'SignInButton'))'); // Method to type EmailId public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) } // Method to type Password public void typePassword(String PasswordValue){ driver.findElement(Password).sendKeys(PasswordValue) } // Method to click SignIn Button public void clickSignIn(){ driver.findElement(SignInButton).click() } // Constructor // Gets called when object of this page is created in MainClass.java public HomePage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver; }
SearchPage.Java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class SearchPage{ WebDriver driver; // Locator for Success Message By SuccessMessage= By.xpath('//div(contains(@id,'Message'))'); // Method that return True or False depending on whether the message is displayed public Boolean MessageDisplayed(){ Boolean status = driver.findElement(SuccessMessage).isDisplayed(); return status; } // Constructor // This constructor is invoked when object of this page is created in MainClass.java public SearchPage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver;
Layer de testare
Test Case sunt implementate în această clasă.
Creăm un pachet separat, să spunem, com.automation.test și apoi creăm o clasă Java aici (MainClass.java).
Pași pentru a crea cazuri de testare:
- Inițializați driverul și deschideți aplicația.
- Creați un obiect al clasei PageLayer (pentru fiecare pagină web) și treceți instanța driverului ca parametru.
- Folosind obiectul creat, efectuați un apel către metodele din clasa PageLayer (pentru fiecare pagină web) pentru a efectua acțiuni / verificare.
- Repetați pasul 3 până când sunt efectuate toate acțiunile și apoi închideți driverul.
//package com.automation.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MainClass { public static void main(String() args) { System.setProperty('webdriver.chrome.driver','./exefiles/chromedriver.exe'); WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get('URL mentioned here'); // Creating object of HomePage and driver instance is passed as parameter to constructor of Homepage.Java HomePage homePage= new HomePage(driver); // Type EmailAddress homePage.typeEmailId('abc@ymail.com'); // EmailId value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Type Password Value homePage.typePassword('password123'); // Password value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Click on SignIn Button homePage.clickSignIn(); // Creating an object of LoginPage and driver instance is passed as parameter to constructor of SearchPage.Java SearchPage searchPage= new SearchPage(driver); //Verify that Success Message is displayed Assert.assertTrue(searchPage.MessageDisplayed()); //Quit browser driver.quit(); } }
Concluzie
Acest tutorial a explicat avantajele modelului de obiect de pagină și cum se creează un model de proiectare de bază POM fără a utiliza Page Factory în Selenium.
În viitorul tutorial, vom discuta încă o altă abordare a POM, adică folosirea abordării Page Factory.
=> Verificați TOATE Tutorialele Selenium aici.
Lectură recomandată
- Model de obiecte de pagină (POM) cu Page Factory | Tutorial Selenium
- Model în spirală - Ce este modelul în spirală SDLC?
- Tutorial Castravete Seleniu: Integrare Castravete Java Seleniu WebDriver
- Utilizarea clasei Selenium Select pentru manipularea elementelor derulante pe o pagină web - Tutorial Selenium # 13
- Introducere în Selenium WebDriver - Tutorial Selenium # 8
- Tutorial ChromeDriver Selenium: Teste Selenium Webdriver pe Chrome
- 30+ Cele mai bune tutoriale despre seleniu: învățați seleniul cu exemple reale
- Oportunitate de muncă freelancing cu normă parțială pentru experții în seleniu