Modelo de objetos de página (POM)

¿Qué es POM?
POM es un patrón de diseño que se usa comúnmente en Selenium para automatizar los casos de prueba. Este patrón de diseño se puede usar con cualquier tipo de marco, como el marco híbrido, basado en palabras clave, basado en datos, etc.
El objeto de página es una clase orientada a objetos que actúa como una interfaz para la página de su aplicación bajo prueba. La clase de página contiene elementos web y métodos para interactuar con elementos web. Mientras automatizamos los casos de prueba, creamos el objeto de estas clases de página e interactuamos con los elementos web llamando a los métodos de estas clases.

Patrón de diseño de modelo de objeto de página

Usos del modelo de objetos de página (POM):
este patrón de diseño se usa en Selenium, donde las páginas web están representadas por una clase correspondiente y los elementos web están representados por las variables de la clase y todas las interacciones son posibles a través de los métodos o funciones de la clase. .

Ventajas del modelo POM:

  • Reutilización: podemos reutilizar la clase de página si es necesario en diferentes casos de prueba, lo que significa que no necesitamos escribir código para identificar los elementos web y los métodos para interactuar con ellos para cada caso de prueba.
  • Mantenibilidad: como podemos ver en la imagen de arriba, el caso de prueba y la clase de página son diferentes entre sí, lo que significa que podemos actualizar fácilmente el código si se agrega cualquier elemento web nuevo o si se actualiza uno existente.
  • Legibilidad: como podemos ver en la imagen de arriba, el código de la página está separado del código de prueba, lo que ayuda a mejorar la legibilidad del código.

Implementación del modelo de objetos de página:
Aquí estoy tomando el ejemplo de la aplicación Gmail para mostrar la implementación de POM .
La jerarquía del proyecto de mi proyecto Maven se muestra a continuación:

Jerarquía del proyecto

Clase TestBase:
en esta clase creamos el objeto de la clase WebDriver , maximizamos el navegador, iniciamos Url, etc.

package test_cases;
  
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
  
public class TestBase {
  
    public static WebDriver driver = null;
  
    @BeforeSuite
    public void initialize() throws IOException {
  
        System.setProperty("webdriver.chrome.driver",
        System.getProperty("user.dir") + 
            "\\src\\test\\java\\drivers\\chromedriver.exe");
    
        driver = new ChromeDriver();
    
        // To maximize browser
        driver.manage().window().maximize();
    
        // Implicit wait
        driver.manage().timeouts().implicitlyWait(
             10, TimeUnit.SECONDS);
    
        // To open Gmail site
        driver.get("https:// www.gmail.com");
    }
  
    @AfterSuite
    // Test cleanup
    public void TeardownTest() {
        TestBase.driver.quit();
    }
}

Clase GmailLoginPage:
en esta clase, identificamos los elementos web de la página de inicio de sesión de Gmail y los métodos para interactuar con estos elementos web.

package pages;
  
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
  
public class GmailLoginPage {
  
    WebDriver driver;
  
    public GmailLoginPage(WebDriver driver) {
        this.driver = driver;
    }
  
    // Using FindBy for locating elements
    @FindBy(how = How.XPATH, using = 
            "// input[@type='email']]")
    WebElement emailTextBox;
  
    @FindBy(how = How.XPATH, using = 
            "// input[@type='password']")
      
    WebElement passwordTextBox;
    @FindBy(how = How.XPATH, using =
            "// div[@role = 'button' and @id  =
            'identifierNext']")
    WebElement nextButton;
  
    // Defining all the user actions (Methods)
    //that can be performed in the Facebook home page
  
    // This method is to set Email in the email text box
    public void setEmail(String strEmail) {
            emailTextBox.sendKeys(strEmail);
        }
        // This method is to set Password in the password text box
    public void setPassword(String strPassword) {
            passwordTextBox.sendKeys(strPassword);
        }
        // This method is to click on Next Button
    public void clickOnNextButton() {
        nextButton.click();
    }
}

Del mismo modo, escribimos el código para la página de inicio de Gmail.

GmailLoginTest:
En esta clase probamos la página de inicio de sesión de Gmail.

package test_cases;
  
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;
import pages.GmailHomePage;
import pages.GmailLoginPage;
  
public class GmailLoginTest extends TestBase {
  
    @Test
    public void init() throws Exception {
  
        // driver.get("https:// www.gmail.com");
        GmailLoginPage loginpage = 
           PageFactory.initElements(driver,
           GmailLoginPage.class);
    
        loginpage.setEmail("abc@gmail.com");
        loginpage.clickOnNextButton();
        loginpage.setPassword("23456@qwe");
        loginpage.clickOnNextButton();
    }
}

Publicación traducida automáticamente

Artículo escrito por mukulsingodiya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *