page object model selenium without using page factory
O modelo de objeto de página (POM) é um padrão de design para manter o repositório de objetos para elementos da web. Este tutorial explica como implementar POM no Selenium sem o Page Factory:
O projeto de automação com script deve ser projetado de forma que seja otimizado e fácil de entender. Isso é obtido usando o POM, que segue certas diretrizes para projetar uma estrutura.
Vamos aprender mais sobre:
- O que é POM?
- Vantagens de usar POM em um projeto
- Como criar um POM básico sem usar a abordagem de fábrica de páginas?
=> Visite aqui para a série exclusiva de tutoriais de treinamento do Selenium.
O que você aprenderá:
Modelo de objeto de página sem fábrica de página
O Modelo de Objeto de Página é um padrão de design usado para manter o repositório de Objetos para os Elementos da Web. Aqui, todos os elementos da web e seus métodos correspondentes são mantidos em uma classe separada para cada página da web. Conseqüentemente, mesmo uma única mudança no atributo de um WebElement refletirá em todos os casos de teste onde quer que seja usado. Desta forma, ele facilita a manutenção do Repositório de Objetos.
O modelo de objetos de página é melhor quando usado para aplicativos que possuem várias páginas ou estados.
Aqui estão os tutoriais em vídeo:
Parte I
parte II
Vantagens do POM
Abaixo estão algumas vantagens do POM:
- É mais fácil manter o código. Quaisquer alterações na interface do usuário serão refletidas onde quer que seja usada na aula.
- Robusto e torna o código legível (os métodos têm nomes mais realistas).
- Torna o código reutilizável e reduz a duplicação de código (o repositório de objetos é independente dos casos de teste).
- O código fica menos e otimizado.
Etapas para criar um POM sem modelo de fábrica de página
# 1) Crie uma classe Java para cada página do aplicativo.
#dois) Em cada classe, declare todos os elementos da Web como variáveis.
# 3) Implemente métodos correspondentes que atuam nas variáveis.
O padrão de design pode ser estruturado usando 2 camadas / pacotes:
- Camada de Página manterá as páginas do aplicativo como uma classe Java individual. Cada classe terá WebElements declarados como variáveis e as ações que são realizadas como métodos.
- Camada de Teste irá conter os casos de teste do aplicativo e sua parte de verificação.
Vamos dar um exemplo de um cenário simples:
- Abra o URL de um aplicativo.
- Digite o endereço de e-mail e os dados da senha.
- Clique no botão Login.
- Verifique a mensagem de login bem-sucedido na página de pesquisa.
Camada de Página
Aqui temos 2 páginas,
- Pagina inicial : A página abre quando o URL é inserido e é aqui que inserimos os dados para login.
- SearchPage : Página que é exibida após um login bem-sucedido.
Na camada Página, cada página no Aplicativo Web é declarada como uma Classe Java separada e seus localizadores e ações são mencionados lá.
Etapas para criar POM com exemplos em tempo real
# 1) Crie uma classe Java para cada página:
Nisso exemplo , acessaremos 2 páginas da web, páginas “Home” e “Search”. Portanto, criaremos 2 classes Java na camada de página (ou em um pacote, digamos com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Crie WebElements como variáveis:
protocolos usados em cada camada do modelo OSI
Estaríamos interagindo com:
- E-mail, senha, campo do botão Login na página inicial.
- Uma mensagem de sucesso na SearchPage.
Então, vamos criar WebElements como variáveis usando a classe ‘Por’.
Por exemplo: Se o email tiver xpath como // div (contains (@id, ‘EmailId’)), então sua declaração de variável é
// Locator for EmailId field
Por EmailAddress = By.xpath (// div (contains (@id, ‘EmailId’)))
# 3) Crie métodos para ações realizadas em WebElements:
Abaixo as ações são realizadas em WebElements:
- Digite a ação no campo EmailAddress.
- Digite a ação no campo Senha.
- Clique em ação no botão Login.
Por exemplo, Métodos definidos pelo usuário são criados para cada ação no WebElement como,
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Aqui, o Id é passado como parâmetro no método, pois a entrada será enviada pelo usuário a partir do caso de teste principal.
Observação :Um construtor deve ser criado para cada classe na Camada de Página para obter a instância do driver da classe Principal na Camada de Teste.
Não iniciamos o driver aqui, em vez disso, sua instância é recebida da Classe Principal quando o objeto da classe Camada de Página é criado.
Duas classes Java são criadas para cada página, conforme mostrado abaixo:
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;
Camada de Teste
Casos de teste são implementados nesta classe.
Criamos um pacote separado, digamos, com.automation.test e, em seguida, criamos uma classe Java aqui (MainClass.java).
Etapas para criar casos de teste:
- Inicialize o driver e abra o aplicativo.
- Crie um objeto da classe PageLayer (para cada página da web) e passe a instância do driver como parâmetro.
- Usando o objeto criado, faça uma chamada aos métodos na classe PageLayer (para cada página da web) para realizar ações / verificação.
- Repita a etapa 3 até que todas as ações sejam realizadas e feche o driver.
//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(); } }
Conclusão
Este tutorial explicou as vantagens do Modelo de Objeto de Página e como criar um padrão de design POM básico sem usar o Page Factory no Selenium.
No próximo tutorial, discutiremos outra abordagem de POM, ou seja, usando a abordagem Page Factory.
=> Verifique TODOS os tutoriais do Selenium aqui.
Leitura recomendada
- Modelo de objeto de página (POM) com fábrica de página | Selenium Tutorial
- Modelo espiral - O que é o modelo espiral SDLC?
- Tutorial Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Uso de Selenium Select Class para lidar com elementos suspensos em uma página da Web - Selenium Tutorial # 13
- Introdução ao Selenium WebDriver - Selenium Tutorial # 8
- Tutorial do ChromeDriver Selenium: testes do Selenium Webdriver no Chrome
- 30+ Melhores Tutoriais de Selênio: Aprenda Selênio com Exemplos Reais
- Oportunidade de trabalho de meio período para especialistas em selênio