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"