Selenium - Modelo de objetos de página

Selenium actúa sobre los elementos web con la ayuda de sus propiedades tales como ID, nombre, XPath, etc. A diferencia de QTP que tiene un repositorio de objetos incorporado (OR), Selenium no tiene OR incorporados.

Por lo tanto, necesitamos construir un quirófano que también debería ser mantenible y accesible a pedido. Page Object Model (POM) es un patrón de diseño popular para crear un repositorio de objetos en el que cada una de esas propiedades de elementos web se crean mediante un archivo de clase.

Ventajas

  • POM es una implementación donde los objetos de prueba y las funciones están separados entre sí, manteniendo así el código limpio.

  • Los objetos se mantienen independientes de los scripts de prueba. Se puede acceder a un objeto mediante uno o más scripts de prueba, por lo que POM nos ayuda a crear objetos una vez y usarlos varias veces.

  • Dado que los objetos se crean una vez, es fácil acceder y actualizar una propiedad particular de un objeto.

Diagrama de flujo de POM

Se crean objetos para cada una de las páginas y se desarrollan métodos exclusivamente para acceder a esos objetos. Usemos http://calculator.net para entender lo mismo.

Hay varias calculadoras asociadas con él y cada uno de esos objetos en una página en particular se crea en un archivo de clase separado como métodos estáticos y se accede a todos a través del archivo de clase 'pruebas' en el que un método estático accedería a los objetos.

Ejemplo

Entendamos esto implementando POM para la prueba de la calculadora de porcentaje.

Step 1 - Cree un archivo de clase simple (page_objects_perc_calc.java) dentro de un paquete y cree métodos para cada uno de esos identificadores de objeto como se muestra a continuación.

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 - Cree una clase con main e importe el paquete y cree métodos para cada uno de esos identificadores de objeto como se muestra a continuación.

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();
   }
}

Salida

La prueba se ejecuta y el resultado se imprime en la consola. A continuación se muestra la instantánea de la misma.