Teste de Software, QA, DevOps

SikuliX Parte 2 – Scripts (API Java)

Olá galera!

Seguindo com a Série de Posts sobre a ferramenta de automatização SikuliX neste post abordarei o uso da SikuliX Script API em Java que proporciona usar todos os recursos da ferramenta em conjunto com a linguagem Java, isto é bom pois podemos integrar com muitas outras ferramentas que também são desenvolvidas na linguagem Java.

Como já visto no post anterior usamos da SikuliX IDE para realizar os recortes das imagens ao qual desejamos interagir, continuaremos a utilizá-la para realizar os recortes quando necessário, além de abordar detalhes que a IDE ainda pode nos provê 🙂

Seguindo o raciocínio do post anterior utilizarei o app exemplo criando os mesmos scripts na API Java do SikuliX. Para gerenciamento do projeto e dependências será utilizado o Maven.

Então, deixando de blá blá blá vamos à ação!

Requisitos do projeto de teste

  1. Possuir Eclipse.
  2. Possuir o Maven configurado.
  3. Importar o projeto em: https://github.com/Vanilton18/examples-sikuli-scriptapi

OBS: A configuração pode ser verificada em: http://vanilton.net/blog/2016/02/01/configurando-um-projeto-de-testes-sikuli-com-maven/

Criando o primeiro script com SikuliX API

No código acima foi implementado uma breve validação se o app exemplo foi ou não aberto. Também já podemos observar o uso da classe Screen, que proporcionará o uso dos métodos principais da SikuliX API, como na SikuliX IDE os métodos da Classe Screen seguem o mesmo nome, como find, exist, hover, click e etc.

Para os métodos detectarem as imagens que devem interagir, no parâmetro deve ser passado o path onde o arquivo de imagem se encontra,  como exemplificado em:

screen.exists("src//test//resources//pictures//main.png")

Outra observação é que no uso de SikuliX API a forma pela qual validamos se um elemento foi ou não detectado é através da verificação de null, pois apenas podemos observar se o objeto não está nulo.

Os métodos que utilizam busca/interação de imagem, exceto o método “exist” retornando null, tem uma exceção chamada FindFailed,  caso o elemento não seja localizado.  

Para realizar os testes execute a classe acima como Java Application.

Interações

No código acima já pode ser observado o uso de métodos de interação como click e hover.

Também é mostrado a classe Settings da SikuliX API, onde é redefinido a variável BundlePath, está variável nativamente é nula e ao receber uma string “path”, utiliza este caminho como padrão para a localização das imagens, como pode ser observado nos métodos de interação não se faz mais necessário passar todo o caminho até o arquivo da imagem e sim apenas o nome da imagem e sua extensão. 

Outras funcionalidades interessantes da classe Settings seria:

  • Settings.Highlight = true; //Ativa a borda na imagem detectada
  • Settings.DefaultHighlightTime = (float) 1.0;  //Defini o tempo da borda sobre a imagem detectada
  • Settings.MoveMouseDelay = (float) 0.1; //Redefine a velocidade de transição do mouse até o elemento
  • Settings.MinSimilarity = 0.9; //Redefine a Similaridade das imagens(padrão 0,7 ou 70%), para (0,9 ou 90%)

Para realizar os testes execute a classe acima como Java Application.

Interações com Type e Paste

O código acima realiza inserção de texto, colagem de texto e valida na tela de Input e Paste do app exemplo se o nome esperado é correto ou incorreto. Também é possível observar o método wait ainda não visto em outros exemplos.

Como já dito no post anterior o método wait por padrão faz a espera pela imagem passada por parâmetro durante 2 segundos, caso seja necessário aumentar a espera apenas se faz necessário adicionar um segundo parâmetro como inteiro, segue o exemplo:

screen.wait("enter.png",20);//Espera alterada para 20 segundos

Outros métodos que podem ser utilizados por meio da classe Screen.

  • screen.h = 1; // Define a altura do elemento a ser clicado
  • screen.w = 1; // Deine a largura do elemento a ser clicado
  • screen.x = 200; // Define a coordenada X
  • screen.y = 200; // Define  coordenada Y
  • screen.click(); // Clica no centro do elemento criado (h,w) na posição x =200 y = 200 começando do canto superior esquerdo (ponto 0) para baixo.
  • screen.doubleClick(); //Clique duplo
  • screen.dragDrop(“img1”, “img2”); // Arrasta a img1 para a img2

  • screen.type(“a”,Key.CTRL); // Atalho CTRL + a

Então é isso pessoal, neste post já tivemos uma prévia de como montar um ambiente SikuliX Script usando sua API na linguagem Java. No próximo post da série continuarei abordando a SikuliX Script API com maiores detalhes do uso da API num projeto de teste, integrando com o framework de teste JUnit e usando o Padrão PageObjects para melhor organização e reaproveitamento.

Até mais galera!

Compartilhe:

2 comentários

    • pratrovic em 2 de junho de 2018 às 19:48

    Responder

    você que trabalha na área poderia me dar uma sugestão bom, eu trabalho com cadastros, em sistema online a cada 100 cadastros só muda idade e sexo o resto e clicks. conheci sikulix hoje , é foi uma das melhores ferramentas que encontrei. obrigado por fala sobre ela. passei meses tentando c# com selenium, mas tive muitos problemas pois a pág tem ajax, jquery e as id sempre mudam…

    1. Responder

      Olá, você chegou a trabalhar com as esperas explícitas do Selenium (WebDriverWait)?

Deixe uma resposta

O seu endereço de email não será publicado