
O que é o padrão Page Objects?
A ideia desse padrão é encapsular os atributos e ações de cada tela, separando-os da especificação dos testes, assim facilitando a manutenção e adicionando praticidade no desenvolvimento implementado em cima de um padrão.
Mas e na prática como funciona?
Geralmente, na maioria dos frameworks de automação de testes, temos um arquivo principal em que definimos um grupo de testes, dentro desse grupo definimos as funções de teste e dentro da função de teste implementamos a lógica para validar o nosso resultado esperado.
Abaixo um exemplo de código sem a implementação do padrão Page Object:
Seguindo o exemplo acima, como podemos melhorar o código utilizando o padrão Page Object?
- Primeiro vamos criar um outro arquivo (PdpElements.js, por exemplo) para armazenar a localização dos elementos.
- Depois vamos criar um outro arquivo (PdpSteps.js, por exemplo) para armazenar a lógica dos comportamentos realizados em tela, criando funções que realizem esse passo a passo.
- E por último, no nosso arquivo de especificação de teste, vamos trocar a lógica bruta do passo a passo pelas funções que criamos no PdpSteps.js.
Após realizar essas alterações, o nosso arquivo de especificação dos testes deve ficar com essa cara:
Com o padrão implementado agora é fácil exemplificar e responder algumas perguntas:
A página do produto teve uma grande alteração de layout e preciso ajustar meus testes, por onde eu começo?
R: Se a localização dos elementos foi alterada eu só vou ajustar o localizador desse elemento no meu arquivo dedicado aos elementos dessa página (PdpElements.js, por exemplo). Sem o padrão Page Object eu precisaria caçar em todos os testes que fizessem a chamada desse elemento para alterar a localização dele.
O comportamento da página do produto mudou para que eu pudesse realizar uma ação especifica e preciso ajustar os meus testes, e agora?
R: Nós agrupamos todas as ações da página em um arquivo apenas, então a lógica vai ser alterada apenas na PdpSteps.js. Sem o padrão Page Object eu precisaria caçar em todos os testes os comportamentos que seriam afetados por essa alteração e teria que alterar todos os testes separadamente.
Como eu sei como organizar todos os elementos e comportamentos semelhantes se eu tenho diversas páginas diferentes para automatizar?
R: Essa resposta depende muito do framework, mas a essência do Page Object é tentar agrupar e separar por páginas mesmo. Exemplo: digamos que eu tenha as páginas: página do produto, página de checkout, página de pedidos, no meu projeto de automação eu vou precisar ter pelo menos um arquivo agrupando os elementos e um arquivo agrupando os comportamentos/ações para cada página.
Em resumo, com a padrão Page Object implementado, nós conseguimos separar as responsabilidades dentro do projeto tirando da especificação dos testes a lógica/busca dos elementos, conseguindo assim deixar a especificação do teste mais limpa e legível. Também facilitamos a manutenção dos testes e por consequência otimizando o tempo de desenvolvimento dos mesmos.
Quer saber mais sobre testes? Visite nossa página sobre o assunto.

Analista de Qualidade