DestaquePageObjectSikuli

SikuliX Parte 3 – Scripts (API Java) utilizando o padrão PageObjects

Olá galera!

Começo aqui o último post da série sobre SikuliX, irei abordar como no anterior o uso da API Java, entretanto, o foco será no padrão PageObjects e aplicação de outros métodos da API, utilizando como suporte para os testes o framework de teste JUnit.

Os exemplos de testes como no post anterior, será utilizado o app exemplo e continuarei os códigos no projeto em https://github.com/Vanilton18/examples-sikuli-scriptapi.

Quem já conhece o padrão PageObjects para desenvolvimento de testes, sabe que entre muitos ganhos podemos destacar:

  • Organização
  • Padronização
  • Reaproveitamento
  • Aumento da produtividade
  • Facilidade de manutenção

E com este padrão em conjunto com a API SikuliX, conseguimos vislumbrar uma grande facilidade na estruturação do projeto e no uso das imagens, caso organizemos elas seguindo um padrão bem definido.

Criando nossa PageObject com SikuliX

A figura abaixo mostra a estrutura de pastas para as imagens em conjunto com uma classe de PageObject chamada PaginaPrincipal.

PageObjectsSikuliXImagens
Estrutura de Pasta Imagens e PageObjects Pagina Principal

Observando a figura acima, nota-se que as imagens estão organizadas em pastas, no caso dos botões, existe uma pasta “botao”, no caso de menu, existe uma pasta menu e assim para submenus entre outras partes do software que podemos organizar. Isto irá ajudar na localização das imagens quando forem utilizadas no código das PageObjects. Outra importante observação é denominar nomes para imagens que façam referência ao que iram interagir, como no caso do menu “Funções”, pois quando necessitarmos interagir com está imagem no método implementado no PageObjects, utilizaremos o mesmo nome da imagem. 🙂

Continuando a observação da imagem, no canto direito, temos a implementação de uma PageObject chamada PaginaPrincipal,  inicialmente definimos o tipo de atributo da classe chamado screen com referência a classe Screen da API SikuliX. Em seguida criamos uma variável com o caminho para o path das imagens chamada “pathPictures”.

O próximo passo para criação da PageObject PaginaPrincipal é a criação de um construtor que receberá sempre uma instância da Classe Screen da API SikuliX, então, para utilizar os métodos desta página sempre deveremos criar uma nova instância dela passando o objeto Screen atualmente em uso.

Por último, devemos criar os métodos que realizaram as interações ou comportamentos apenas nesta página, isto é, caso aja necessidade de interagir com elementos de outra página, devemos criar uma nova classe que terá tais responsabilidades, retornando todo o ciclo de criação da PageObject citado até aqui.

Generalizando métodos com uso do nome dos arquivos de imagens

Como já havia mencionado antes,  devemos utilizar nomes para imagens que façam referência a sua ação, por exemplo no método “clicarNoMenu” receberá uma string por parâmetro, e seguirá para execução no método screen.wait | screen.click com parâmetro do path onde localiza-se a imagem, logo pode-se observar que a string passada no método “clicarNoMenu” deverá ser o mesmo nome do arquivo de imagem armazenado na pasta menu. Em miúdos, caso houvesse a necessidade de interagir com outro menu, bastaria criar um novo recorte e salvar a imagem com o nome do menu na pasta de menus, e em seguida utilizar o método passando o nome da imagem.

O que ganhamos com estes métodos genéricos? Com o uso de SikuliX este padrão nos proporcionará escrever muito menos código, e nos preocupar mais em realizar os recortes das imagens. Acredite, sem isto você provavelmente perderá muuuuuiito tempo abrindo imagens e checando se estão corretas. 😀

Criando nossa Classe de Teste com PageObject SikuliX

A Classe de Teste acima utilizará as PageObjects PaginaPrincipal e PaginaInputPaste, como podemos observar estas classes são atributos da Classe de Teste, juntamente com a Screen da API SikuliX.

No método com a anotação BeforeClass, instanciamos o objecto Screen e abrimos o app exemplo. Em seguida iniciaremos o método de teste e o primeiro passo para utilizarmos a PageObjects, como já citado, é instanciá-la passando o objeto screen em uso:

 paginaPrincipal = new PaginaPrincipal(screen);

Após isto, podemos utilizar todos os método implementados nesta página como:

paginaPrincipal.clicarNoMenu("Funções");

Veja que agora na classe de teste, a leitura do método fica clara até mesmo para uma pessoa menos técnica, e o uso da imagem com o nome “Funções” é imperceptível.

Por fim, também podemos observar que para interagir com elementos da PageObject PaginaInputPaste, devemos realizar a instanciação e em seguida utilizar os seus métodos.

Então é isso pessoal, espero ter ajudado com esta série de posts a dar uma ideia de como organizar, aplicar e utilizar em um projeto real essa ferramenta que tem um potencial enorme para automatização de testes. Qualquer dúvida e sugestão podem deixar nos comentários que ficarei contente em ajudar.

Até mais!

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.