Sobes.tech
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"