Aniversário
Alura 12 anos

20% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

Page Object: o que é?

Felipe Nascimento
Felipe Nascimento

Compartilhe

Nesse artigo vamos conhecer o padrão PageObject e sua função quando falamos em testes automatizados.

PageObject é um padrão de design que ajuda a aprimorar a manutenção de testes e reduzir a duplicação de código, também pode ser utilizado para descrever e documentar o fluxo de uma aplicação. Para entender na prática como aplicar PageObject criaremos um teste automatizado responsável por fazer o login em uma aplicação.

Criando um teste

O código abaixo foi escrito utilizando a biblioteca cypress e descreve os passos para fazer login em um site:

describe('Login', function(){
  it('Sign in', function(){
 	cy.visit('www.site.com.br')
 	cy.get('input[type="email"]').type('[email protected]')
 	cy.get('input[type="password"]').type('senha')
 	cy.get('btn').contains('Entrar').click()
   })
})

Neste teste estamos dizendo para o cypress entrar em um site, preencher os inputs com email e senha e clicar no botão de entrar.

À primeira vista, esse código não parece ter nada de incorreto e realmente não tem, se a automatização fosse apenas essa poderíamos parar por aqui. Porém o mais comum de acontecer é ter vários testes dentro de um mesmo arquivo, os nomes dos inputs podem mudar e rapidamente fica muito difícil de gerenciar o que está acontecendo. Já que por enquanto só estamos testando o login, podemos antecipar esses problemas e aplicar o padrão PageObject.

Banner promocional da Alura com fundo azul escuro. No topo, o logotipo da Alura. O texto diz: “O presente é SEU. Chegou o Aniversário da Alura e preparamos uma surpresa PARA VOCÊ. 20% OFF para estudar na Alura. Válido de 12 a 23 de maio”. Abaixo, um botão rosa com a frase “APROVEITE O DESCONTO”. Na parte inferior do banner, há a imagem de uma caixa de presente azul com laço brilhante.

Aplicando o PageObject

A ideia do PageObject é separar os elementos em arquivos diferentes baseados nas páginas em que eles aparecem, assim, escrevemos todos os elementos e métodos específicos daquela página em seu arquivo que é uma classe JavaScript e usamos diretamente nos scripts de teste.

Seguindo esse princípio, criamos uma classe que vai representar o login do nosso teste:

class login {
  email(){
 	return cy.get('input[type="email"]')
   }
  senha(){
   return cy.get('input[type="password"]')
	}
   entrar(){
	return cy.get('btn').contains('Entrar')
	}
 }
export default login

Cada um dos métodos dessa classe representa uma ação de teste. Com a classe criada podemos chamar os métodos da classe login dentro do arquivo de teste login:

import Login from '../login.js'
describe('Login', function(){
 const login = new Login()
  it('Sign in', function(){
 	cy.visit('www.site.com.br')
 	login.email().type('[email protected]')
 	login.senha().type('senha')
 	login.entrar().click()
  })
})

Como podemos ver no código acima, a página de login corresponde a um PageObject e esse PageObject pode ser chamado nos Scripts de teste para realizar o login na aplicação. O benefício que ganhamos é que, se a interface mudar, os testes em si não precisam mudar, apenas o código dentro do objeto da página precisa mudar.

Se você gostou desse conteúdo e quer saber mais, aqui na Alura temos uma Formação Front-end onde vamos nos aprofundar ainda mais em HTML e CSS e principalmente em JavaScript.

Felipe Nascimento
Felipe Nascimento

Desenvolvedor e instrutor na Alura com foco em JavaScript.

Veja outros artigos sobre Front-end