Selênio - Modelo de objeto de página

O Selenium atua em elementos da web com a ajuda de suas propriedades, como ID, nome, XPath, etc. Ao contrário do QTP, que possui um repositório de objetos (OR) embutido, o Selenium não tem ORs embutidos.

Portanto, precisamos construir uma sala de operação que também deve ser mantida e acessível sob demanda. O Modelo de Objeto de Página (POM) é um padrão de design popular para criar um Repositório de Objetos no qual cada uma dessas propriedades de elemento da web é criada usando um arquivo de classe.

Vantagens

  • POM é uma implementação onde os objetos e funções de teste são separados uns dos outros, mantendo assim o código limpo.

  • Os objetos são mantidos independentes de scripts de teste. Um objeto pode ser acessado por um ou mais scripts de teste, portanto, o POM nos ajuda a criar objetos uma vez e usá-los várias vezes.

  • Como os objetos são criados uma vez, é fácil acessar e atualizar uma propriedade particular de um objeto.

Diagrama de Fluxo POM

Os objetos são criados para cada uma das páginas e os métodos são desenvolvidos exclusivamente para acessar esses objetos. Vamos usar http://calculator.net para entender o mesmo.

Existem várias calculadoras associadas a ele e cada um desses objetos em uma página específica é criado em um arquivo de classe separado como métodos estáticos e todos eles são acessados ​​através do arquivo de classe de 'testes' no qual um método estático estaria acessando os objetos.

Exemplo

Vamos entender isso implementando o POM para o teste da calculadora de porcentagem.

Step 1 - Crie um arquivo de classe simples (page_objects_perc_calc.java) dentro de um pacote e crie métodos para cada um desses identificadores de objeto, conforme mostrado abaixo.

package PageObject;

import org.openqa.selenium.*;
 
public class PageObjectsPercCalc {
   private static WebElement element = null;
 
   // Math Calc Link
   public static webElement lnk_math_calc(WebDriver driver) {
      element = driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a"));
      return element;
   }
	
   //Percentage Calc Link
   public static webElement lnk_percent_calc(WebDriver driver) {
      element = driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a"));
      return element;
   }
	
   //Number 1 Text Box
   public static webElement txt_num_1(WebDriver driver) {
      element = driver.findElement(By.id("cpar1"));
      return element;
   }
	
   //Number 2 Text Box	
   public static webElement txt_num_2(WebDriver driver) {
      element = driver.findElement(By.id("cpar2"));
      return element;
   }
	
   //Calculate Button	
   public static webElement btn_calc(WebDriver driver) {
      element =
         driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input"));
      return element;
   }	
	
   // Result	
   public static webElement web_result(WebDriver driver) {
      element =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b"));
      return element;
   }	
}

Step 2 - Crie uma classe com main e importe o pacote e crie métodos para cada um desses identificadores de objeto como mostrado abaixo.

package PageObject;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PercentCalculator {
   private static WebDriver driver = null;
  
   public static void main(String[] args) {
   
      driver = new FirefoxDriver();
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      driver.get("http://www.calculator.net");
  
      //Use page Object library now
      page_objects_perc_calc.lnk_math_calc(driver).click();		
      page_objects_perc_calc.lnk_percent_calc(driver).click();
      
      page_objects_perc_calc.txt_num_1(driver).clear();
      page_objects_perc_calc.txt_num_1(driver).sendKeys("10");      
  	   
      page_objects_perc_calc.txt_num_2(driver).clear();
      page_objects_perc_calc.txt_num_2(driver).sendKeys("50");  
  	   
      page_objects_perc_calc.btn_calc(driver).click();
      String result =  page_objects_perc_calc.web_result(driver).getText();
      
      if(result.equals("5")) {      
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
      
      driver.close();
   }
}

Resultado

O teste é executado e o resultado é impresso no console. A seguir está o instantâneo do mesmo.