Sobes.tech
Middle

¿Qué es el patrón Page Object?

sobes.tech AI

Respuesta de la IA

El patrón Page Object es un patrón de diseño utilizado para mejorar la legibilidad, mantenibilidad y reducir la duplicación de código en la automatización de pruebas de aplicaciones web. Es un enfoque orientado a objetos donde cada página (o componente significativo) de la aplicación web se representa mediante una clase.

Ideas principales del Page Object:

  • Encapsulación de los elementos de la página y las acciones que se pueden realizar con ellos.
  • Separación de los localizadores de elementos y la lógica de negocio de las pruebas.
  • Proporcionar una API de alto nivel para interactuar con la página.

Ventajas del uso de Page Object:

  • Mejora la legibilidad de las pruebas: Las pruebas se vuelven más declarativas, describiendo los pasos de interacción con la interfaz de usuario en un lenguaje de negocio.
  • Mejora la mantenibilidad: Cuando cambia la UI (por ejemplo, el localizador de un elemento), basta con hacer el cambio en una sola clase Page Object, en lugar de en cada prueba que use ese elemento.
  • Reducción de la duplicación de código: Las acciones comunes con la página están encapsuladas en métodos de Page Object y pueden reutilizarse en diferentes pruebas.
  • Aumenta la estabilidad de las pruebas: Gracias a la abstracción de los detalles de implementación de la UI.

Ejemplo de estructura:

Supongamos que tenemos una página de inicio de sesión. Podemos crear una clase LoginPage.

# login_page.py
from selenium.webdriver.common.by import By

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = (By.ID, "username")
        self.password_input = (By.ID, "password")
        self.login_button = (By.XPATH, "//button[text()='Login']")

    def set_username(self, username):
        self.driver.find_element(*self.username_input).send_keys(username)

    def set_password(self, password):
        self.driver.find_element(*self.password_input).send_keys(password)

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click()

    def login(self, username, password):
        self.set_username(username)
        self.set_password(password)
        self.click_login_button()

Uso en la prueba:

# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage

class LoginTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://example.com/login")

    def test_valid_login(self):
        login_page = LoginPage(self.driver)
        login_page.login("valid_user", "valid_password")
        # Verificación de inicio de sesión exitoso

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

Aquí, la clase LoginPage encapsula los localizadores y acciones relacionadas con la página de inicio de sesión. La prueba test_valid_login interactúa con LoginPage a través de métodos de alto nivel como login. Si el localizador del campo de usuario cambia, solo será necesario modificarlo en LoginPage.