Selenio - Modello a oggetti di pagina

Selenium agisce sugli elementi web con l'aiuto delle loro proprietà come ID, nome, XPath, ecc. A differenza di QTP che ha un repository di oggetti (OR) integrato, Selenium non ha OR incorporati.

Quindi abbiamo bisogno di costruire una sala operatoria che dovrebbe anche essere manutenibile e accessibile su richiesta. Page Object Model (POM) è un modello di progettazione popolare per creare un repository di oggetti in cui ciascuna di queste proprietà degli elementi web viene creata utilizzando un file di classe.

Vantaggi

  • POM è un'implementazione in cui gli oggetti e le funzioni di test sono separati l'uno dall'altro, mantenendo così il codice pulito.

  • Gli oggetti vengono mantenuti indipendenti dagli script di test. È possibile accedere a un oggetto da uno o più script di test, quindi POM ci aiuta a creare oggetti una volta e a utilizzarli più volte.

  • Poiché gli oggetti vengono creati una volta, è facile accedere e aggiornare una particolare proprietà di un oggetto.

Diagramma di flusso POM

Gli oggetti vengono creati per ciascuna delle pagine e i metodi vengono sviluppati esclusivamente per accedere a tali oggetti. Usiamo http://calculator.net per capire lo stesso.

Ci sono vari calcolatori associati ad esso e ciascuno di quegli oggetti in una particolare pagina viene creato in un file di classe separato come metodi statici e tutti sono accessibili tramite il file di classe "test" in cui un metodo statico accederà agli oggetti.

Esempio

Cerchiamo di capirlo implementando POM per il test del calcolatore percentuale.

Step 1 - Creare un semplice file di classe (page_objects_perc_calc.java) all'interno di un pacchetto e creare metodi per ciascuno di questi identificatori di oggetto come mostrato di seguito.

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 - Creare una classe con main e importare il pacchetto e creare metodi per ciascuno di questi identificatori di oggetto come mostrato di seguito.

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

Produzione

Il test viene eseguito e il risultato viene stampato nella console. Di seguito è riportata l'istantanea della stessa.