Pular para conteúdo

Page Object

O Page Object é o componente responsável por encapsular a interface do usuário no Probato. Ele abstrai detalhes de UI e fornece métodos claros para interação com a aplicação. No modelo mental do Probato, o Page Object é um detalhe de implementação, não um elemento de orquestração ou decisão de fluxo.

Seu objetivo é isolar a interface do restante do código de teste, tornando os testes mais legíveis, reutilizáveis e resilientes a mudanças de UI.

Papel do Page Object no Probato

O Page Object é responsável por:

  • Encapsular elementos e ações da interface do usuário
  • Isolar mudanças de UI do restante do código
  • Fornecer uma API clara e expressiva para interação
  • Enriquecer a execução com informações semânticas

O Page Object responde à pergunta: Como interagir com o sistema?

Ele não sabe por que uma ação é executada, apenas como executá-la.

Onde o Page Object se encaixa no modelo mental

No fluxo conceitual do Probato, o Page Object é sempre utilizado por Procedures e nunca acessado diretamente por Scripts ou Suites.

Conceptual model
Suite
 ├── SQL (global state / feature preconditions)
 ├── NoSQL (global state / feature preconditions)
 └── Script
      ├── Dataset (execution data)
      ├── SQL (scenario-specific state)
      ├── NoSQL (scenario-specific state)
      ├── Precondition
      │     └── Page Object
      │           ├── Action
      │           └── Param
      ├── Procedure
      │     └── Page Object
      │           ├── Action
      │           └── Param
      └── Postcondition
            └── Page Object
                  ├── Action
                  └── Param

Essa restrição garante que decisões de fluxo permaneçam fora da camada de interface.

Page Object no Probato

O Probato adota o padrão clássico de Page Object, sem reinventá-lo ou criar abstrações artificiais. Sobre esse padrão consolidado, o framework adiciona uma camada semântica, enriquecendo a execução por meio de anotações.

Action

A anotação @Action descreve semanticamente uma ação executada na interface.

Ela permite:

  • Geração de logs mais claros
  • Relatórios mais compreensíveis
  • Melhor rastreabilidade da execução

A descrição da ação deve representar o que está sendo feito, e não como a ação é implementada.

Param

A anotação @Param identifica parâmetros relevantes utilizados em uma ação.

Ela permite:

  • Rastrear dados utilizados durante a execução
  • Enriquecer métricas e evidências
  • Facilitar auditoria e diagnóstico de falhas

Essas anotações não alteram o comportamento do código, mas ampliam significativamente sua observabilidade.

Separação de responsabilidades

Para manter a arquitetura clara e previsível:

  • Page Objects não devem conter lógica de cenário
  • Decisões de fluxo pertencem às Procedures
  • Dados são fornecidos externamente (Dataset)
  • Estado da aplicação é tratado fora da camada de UI

O Page Object deve se limitar a:

  • Localizar elementos
  • Executar ações
  • Expor verificações simples e diretas

O que NÃO deve estar em um Page Object

Um Page Object não deve:

  • Acessar banco de dados
  • Conter lógica condicional baseada em cenário
  • Conhecer Dataset, Script ou Suite
  • Definir ou manipular estado global da aplicação

Essas responsabilidades pertencem a outros níveis do framework.

Boas práticas

  • Crie Page Objects pequenos e coesos
  • Um Page Object deve representar uma tela ou componente específico
  • Evite Page Objects genéricos demais
  • Prefira métodos descritivos e legíveis
  • Nomeie ações de acordo com o comportamento percebido pelo usuário

Próximo passo

Após compreender o Page Object, o próximo conceito é o Dataset, responsável por fornecer dados de execução aos cenários.

➡️ Continue em Dataset.