Sobes.tech
Senior

¿Qué es el Modelo de Políticas (PM)?

sobes.tech AI

Respuesta de la IA

El Modelo de Política (PM) en el contexto de las pruebas automatizadas es una extensión del Modelo de Objeto de Página (POM). La idea principal es separar las políticas o reglas de negocio para interactuar con los elementos de la página (y el comportamiento asociado a estas políticas) de los propios objetos de página.

En lugar de incluir verificaciones y lógica compleja directamente en los Objetos de Página, estas reglas se colocan en clases o módulos separados — Objetos de Política.

Ventajas de este enfoque:

  • Mejor legibilidad: Los escenarios de prueba son más simples y fáciles de entender, ya que se centran en la acción descrita, no en su validación.
  • Reutilización: Las políticas pueden ser utilizadas para diferentes Objetos de Página o en diferentes escenarios de prueba.
  • Separación de responsabilidades: Los Objetos de Página solo se encargan de interactuar con los elementos de la página, mientras que los Objetos de Política se encargan de las reglas y validaciones.
  • Facilita el mantenimiento: Cambiar una regla de negocio requiere modificar solo el Objeto de Política, no todos los Objetos de Página donde se aplique esa regla.
  • Mejor escalabilidad: Es más fácil gestionar un mayor número de pruebas y páginas a medida que la aplicación crece.

La estructura del PM puede ser así:

  • Objetos de Página: Representan páginas o módulos UI individuales. Contienen localizadores de elementos y métodos para interactuar con ellos (por ejemplo, click_button(), enter_text()). No contienen lógica de validación.
  • Objetos de Política: Representan reglas o políticas de negocio. Contienen métodos para verificar el estado de la UI o realizar acciones basadas en la lógica de negocio (por ejemplo, is_user_logged_in(), can_submit_form(), perform_checkout()). Pueden usar uno o varios Objetos de Página.
  • Pruebas: Utilizan Objetos de Política para ejecutar escenarios que incluyen verificaciones y lógica de negocio.

Ejemplo (pseudocódigo):

# Objeto de Página
class LoginPage:
    def enter_username(self, username):
        # interactuar con el campo de usuario
        pass

    def enter_password(self, password):
        # interactuar con el campo de contraseña
        pass

    def click_login_button(self):
        # interactuar con el botón de login
        pass

# Objeto de Política
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Suponiendo que existe DashboardPage

    def login_as_user(self, username, password):
        self.login_page.enter_username(username)
        self.login_page.enter_password(password)
        self.login_page.click_login_button()
        # Potencialmente agregar verificaciones aquí o en métodos separados
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Verificar si los elementos del panel de control son visibles
        return self.dashboard_page.is_dashboard_displayed()

# Prueba
class LoginTest:
    def test_successful_login(self, driver):
        auth_policy = AuthPolicy(driver)
        auth_policy.login_as_user("test_user", "password123")
        assert auth_policy.is_user_logged_in(), "El usuario debería estar conectado"