page object model selenium without using page factory
El model d'objectes de pàgina (POM) és un patró de disseny per mantenir el dipòsit d'objectes per a elements web. Aquest tutorial explica com implementar POM a Selenium sense fàbrica de pàgines:
El projecte d’automatització amb guions s’ha de dissenyar de manera que sigui optimitzat i fàcil d’entendre. Això s’aconsegueix utilitzant POM que segueix certes pautes per dissenyar un marc.
Aprendrem més sobre:
- Què és POM?
- Avantatges d'utilitzar POM en un projecte
- Com es pot crear un POM bàsic sense utilitzar Page Factory Approach?
=> Visiteu aquí la selecció exclusiva de formació de Selenium.
Què aprendreu:
Model d'objectes de pàgina sense fàbrica de pàgines
El model d'objectes de pàgina és un patró de disseny que s'utilitza per mantenir el dipòsit d'objectes per als elements web. Aquí, tots els elements web i els seus mètodes corresponents es mantenen en una classe independent per a cada pàgina web. Per tant, fins i tot un sol canvi en l'atribut d'un WebElement es reflectirà en tots els casos de prova allà on s'utilitzi. D’aquesta manera, millora el manteniment del repositori d’objectes.
El model d'objectes de pàgina és el millor quan s'utilitza per a aplicacions que tenen diverses pàgines o estats.
Aquí teniu els videotutorials:
Part I
Part II
Avantatges de POM
A continuació es detallen alguns avantatges de POM:
- És més fàcil mantenir el codi. Qualsevol canvi a la interfície d'usuari es reflectirà allà on s'utilitzi a la classe.
- Robust i fa que el codi sigui llegible (els mètodes tenen noms més realistes).
- Fa que el codi es pugui reutilitzar i redueix la duplicació de codi (el dipòsit d'objectes és independent dels casos de prova).
- El codi es redueix i s’optimitza.
Passos per crear un POM sense model de fàbrica de pàgines
# 1) Creeu una classe Java per a cada pàgina de l'aplicació.
# 2) A cada classe, declareu tots els elements web com a variables.
# 3) Implementar els mètodes corresponents que actuen sobre les variables.
El patró de disseny es pot estructurar mitjançant 2 capes / paquets:
- Capa de pàgina mantindrà les pàgines de l'aplicació com a classe Java individual. Cada classe tindrà declarats elements web com a variables i les accions que es realitzen com a mètodes.
- Capa de prova mantindrà els casos de prova de l'aplicació i la seva part de verificació.
Prenguem un exemple d'un escenari senzill:
- Obriu l'URL d'una aplicació.
- Escriviu l'adreça de correu electrònic i les dades de contrasenya.
- Feu clic al botó Inici de sessió.
- Verifiqueu el missatge d’inici de sessió correcte a la pàgina de cerca.
Capa de pàgina
Aquí tenim 2 pàgines,
- Pàgina inicial : La pàgina s'obre quan s'introdueix l'URL i és aquí on introduïm les dades per iniciar la sessió.
- Pàgina de cerca : Pàgina que es mostra després d'un inici de sessió correcte.
A la capa de pàgina, cada pàgina de l'aplicació web es declara com una classe Java independent i s'hi mencionen els seus localitzadors i accions.
Passos per crear POM amb exemples en temps real
# 1) Creeu una classe Java per a cada pàgina:
En aquest exemple , accedirem a 2 pàgines web, pàgines 'Inici' i 'Cerca'. Per tant, crearem 2 classes Java a la capa de pàgines (o en un paquet, com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Creeu elements web com a variables:
millors aplicacions per espiar algú
Estaríem interactuant amb:
- Correu electrònic, contrasenya, camp del botó d’inici de sessió a la pàgina inicial.
- Un missatge reeixit a la pàgina de cerca.
Per tant, crearem WebElements com a variables mitjançant la classe 'Per'.
Per exemple: Si el correu electrònic té xpath com // div (conté (@id, 'EmailId'))), llavors la seva declaració variable és
// Localitzador del camp EmailId
By EmailAddress = By.xpath (// div (contains (@id, ‘EmailId’)))
# 3) Creeu mètodes per a accions realitzades a WebElements:
A continuació es realitzen accions a WebElements:
- Escriviu l'acció al camp Adreça electrònica.
- Escriviu l'acció al camp Contrasenya.
- Feu clic a l'acció al botó Inici de sessió.
Per exemple, Es creen mètodes definits per l'usuari per a cada acció al WebElement com:
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Aquí, l’identificador es passa com a paràmetre al mètode, ja que l’entrada l’enviarà l’usuari des del cas de prova principal.
Nota :Cal crear un constructor per a cada classe de la capa de pàgina per obtenir la instància del controlador de la classe principal de la capa de prova.
Aquí no iniciem el controlador, sinó que la seva instància es rep de la classe principal quan es crea l'objecte de la classe de capa de pàgina.
Es creen dues classes Java per a cada pàgina, tal com es mostra a continuació:
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;
Capa de prova
Els casos de prova s’implementen en aquesta classe.
Creem un paquet separat per exemple, com.automation.test i després creem una classe Java aquí (MainClass.java).
Passos per crear casos de prova:
- Inicialitzeu el controlador i obriu l'aplicació.
- Creeu un objecte de la classe PageLayer (per a cada pàgina web) i passeu la instància del controlador com a paràmetre.
- Amb l’objecte creat, feu una trucada als mètodes de la classe PageLayer (per a cada pàgina web) per realitzar accions / verificació.
- Repetiu el pas 3 fins que es realitzin totes les accions i, a continuació, tanqueu el controlador.
//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(); } }
Conclusió
Aquest tutorial explica els avantatges del model d'objectes de pàgina i com crear un patró de disseny bàsic POM sense utilitzar Page Factory a Selenium.
En el proper tutorial, parlarem d’un altre enfocament de POM, és a dir, l’ús de l’enfocament de Page Factory.
=> Consulteu TOTS els tutorials de Selenium aquí.
Lectura recomanada
- Model d'objectes de pàgina (POM) amb Page Factory | Tutorial de seleni
- Model en espiral: què és el model en espiral SDLC?
- Tutorial de Cogombre Selenium: Integració de Cogombre Java Selenium WebDriver
- Ús de la classe Selenium Select per a la manipulació d’elements desplegables en una pàgina web - Tutorial Selenium # 13
- Introducció a Selenium WebDriver - Tutorial Selenium núm. 8
- Tutorial de ChromeDriver Selenium: proves de Selenium Webdriver a Chrome
- 30+ millors tutorials sobre seleni: apreneu el seleni amb exemples reals
- Oportunitat de treball autònom a temps parcial per a experts en seleni