Senior
O que é o Modelo de Política (PM)?
sobes.tech IA
Resposta da IA
O Modelo de Política (PM) no contexto de testes automatizados é uma extensão do Modelo de Objeto de Página (POM). A ideia principal é separar as políticas ou regras de negócio para interagir com os elementos da página (e o comportamento associado a essas políticas) dos próprios objetos de página.
Em vez de incluir verificações e lógica complexa diretamente nos Objetos de Página, essas regras são colocadas em classes ou módulos separados — Objetos de Política.
Vantagens desta abordagem:
- Melhor legibilidade: Os cenários de teste tornam-se mais simples e fáceis de entender, pois concentram-se na ação descrita, não na sua validação.
- Reutilização: As políticas podem ser usadas para diferentes Objetos de Página ou em diferentes cenários de teste.
- Separação de responsabilidades: Os Objetos de Página são responsáveis apenas pela interação com os elementos da página, enquanto os Objetos de Política cuidam das regras e validações.
- Facilita a manutenção: Alterar uma regra de negócio requer alterar apenas o Objeto de Política, não todos os Objetos de Página onde essa regra é aplicada.
- Melhor escalabilidade: É mais fácil gerir um maior número de testes e páginas à medida que a aplicação evolui.
A estrutura do PM pode ser assim:
- Objetos de Página: Representam páginas ou módulos UI individuais. Contêm localizadores de elementos e métodos para interagir com eles (por exemplo,
click_button(),enter_text()). Não contêm lógica de validação. - Objetos de Política: Representam regras ou políticas de negócio. Contêm métodos para verificar o estado da UI ou realizar ações baseadas na lógica de negócio (por exemplo,
is_user_logged_in(),can_submit_form(),perform_checkout()). Podem usar um ou vários Objetos de Página. - Testes: Utilizam Objetos de Política para executar cenários que incluem verificações e lógica de negócio.
Exemplo (pseudocódigo):
# Objeto de Página
class LoginPage:
def enter_username(self, username):
# interagir com o campo de nome de usuário
pass
def enter_password(self, password):
# interagir com o campo de senha
pass
def click_login_button(self):
# interagir com o botão de login
pass
# Objeto de Política
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Supondo que DashboardPage exista
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 adicionar verificações aqui ou em métodos separados
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Verifica se os elementos do painel de controle estão visíveis
return self.dashboard_page.is_dashboard_displayed()
# Teste
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(), "O usuário deve estar logado"