Tutorial Sikuli para Selenium Automação

Em que está Sikuli Selenium?

Sikuli é uma ferramenta de automação de teste baseada em GUI de código aberto. É usado principalmente para interagir com elementos de páginas da web e lidar com pop-ups baseados em janelas. Sikuli usa a técnica de “Reconhecimento de imagem” e “GUI de controle” para interagir com elementos de páginas da web e janelas pop-up. No Sikuli, todos os elementos da web são tomados como imagens e armazenados dentro do projeto.

Como usar Sikuli com Selenium Driver da Web

O Sikuli pode ser integrado ao selenium webdriver usando o arquivo Sikuli JAR.

A sequência abaixo é a lista de etapas para configurar o Sikuli com Selenium webdriver.

Etapa 1) Baixar o arquivo Sikuli JAR do URL abaixo e extraia o conteúdo do arquivo ZIP para uma pasta.

https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5

Use Sikuli com Selenium Driver da Web

Passo 2) Crie um novo projeto JAVA em Eclipse e adicione o arquivo JAR ao caminho de construção, junto com os arquivos jar de selênio usando o botão direito do mouse no projeto -> Caminho de construção -> Configurar caminho de construção

use Sikuli com Selenium Driver da Web

Depois de adicionar o arquivo JAR ao caminho de construção do projeto, as classes fornecidas pelo Sikuli podem ser usadas.

Aula de tela em Sikuli

A classe Screen é a classe base para todos os métodos fornecidos pelo Sikuli. A classe Screen contém métodos predefinidos para todas as operações comumente executadas em elementos da tela, como clicar, clicar duas vezes, fornecer entrada para uma caixa de texto, passar o mouse, etc. A seguir está a lista de métodos comumente usados ​​​​fornecidos pela classe Screen.

Forma Descrição Sintaxe
Clique Este método é usado para clicar em um elemento da tela usando o nome da imagem como parâmetro. Tela s = new Tela();

s.click(“QA.png”);

Duplo click Este método é usado para clicar duas vezes em um elemento. Aceita o nome da imagem como parâmetro. Tela s = new Tela();

s.doubleClick(“QA.png”);

Formato Este método é usado para fornecer valor de entrada a um elemento. Aceita o nome da imagem e o texto a serem enviados como parâmetros.

s.type(“QA.png”,”TEXTO”);

Pairar Este método é usado para passar o mouse sobre um elemento. Aceita o nome da imagem como parâmetro.

s.hover(“QA.png”);

Encontre Este método é usado para localizar um elemento específico na tela. Aceita o nome da imagem como parâmetro.

s.find(“QA.png”);

Classe de padrão em Sikuli

A classe padrão é usada para associar o arquivo de imagem a atributos adicionais para identificar exclusivamente o elemento. Toma o caminho da imagem como parâmetro.

Padrão p = novo Padrão(“Caminho da imagem”);

A seguir estão os métodos mais comumente usados ​​da classe Pattern.

Forma Descrição Sintaxe
getNomeArquivo Retorna o nome do arquivo contido no objeto Pattern.

Padrão p = novo Padrão(“D:\Demo\QA.png”);

String nome do arquivo = p.getFileName();

semelhante Este método retorna um novo objeto Pattern com similaridade definida para um valor especificado. Aceita o valor de similaridade entre 0 e 1 como parâmetro. Sikuli procura todos os elementos que estão dentro do intervalo de similaridade especificado e retorna um novo objeto padrão.

Padrão p1 = p.similar(0.7f);

Exato Este método retorna um novo objeto padrão com similaridade definida como 1. Ele procura apenas uma correspondência exata do elemento especificado.

Padrão p1 = p.exato();

Exemplo de código para upload de arquivo usando Sikuli

O código abaixo explica o uso do Sikuli para upload de arquivos em Firefox.

package com.sikuli.demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;
import org.openqa.selenium.chrome.ChromeDriver;

public class SikuliDemo {

    public static void main(String[] args) throws FindFailed {

        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        String filepath = "D:\\Guru99Demo\\Files\\";
        String inputFilePath = "D:\\Guru99Demo\\Files\\";
        Screen s = new Screen();
        Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
        Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
        WebDriver driver;

        // Open Chrome browser    
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/image_upload/index.php");

        // Click on Browse button and handle windows pop up using Sikuli
        driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
        s.wait(fileInputTextBox, 20);
        s.type(fileInputTextBox, inputFilePath + "Test.docx");
        s.click(openButton);

        // Close the browser
        driver.close();
    }
}

Explicação do código:

Passo 1) A primeira instrução envolve definir o caminho executável do driver para o Chrome.

System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");

Passo 2) Use uma ferramenta de captura de tela como Snipping Tool para tirar screenshots do popup do Windows 'FileTextBox' e botão 'Abrir'.

Exemplo de código para upload de arquivo usando Sikuli

Esta é a aparência da sua captura de tela: –

Exemplo de código para upload de arquivo usando Sikuli

As imagens para a caixa de texto de entrada de arquivo do Windows e o botão Abrir são armazenadas em 'FileTextBox.PNG' e 'OpenButton.PNG'.

Sikuli utiliza a técnica de reconhecimento de imagem para reconhecer elementos na tela. Ele encontra elementos na tela apenas com base em suas imagens.

Exemplo: Se você deseja automatizar a operação de abertura do bloco de notas, então você precisa armazenar a imagem de um ícone da área de trabalho para o bloco de notas em um arquivo PNG e realizar a operação de clique nele.

No nosso caso, ele reconhece a caixa de texto de entrada do arquivo e abre o botão Windows popup usando as imagens armazenadas. Se a resolução da tela mudar da captura de imagem para a execução do script de teste, o comportamento do Sikuli seria inconsistente. Portanto, é sempre aconselhável executar o script de teste na mesma resolução em que as imagens são capturadas. A alteração no tamanho do pixel das imagens fará com que o Sikuli lance uma exceção FindFailed.

Passo 3) As próximas instruções incluem a criação de objetos para as classes Screen e Pattern. Crie um novo objeto de tela. Defina o caminho do arquivo que deseja carregar como parâmetro para o objeto Padrão.

Screen s = new Screen();
Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
Pattern openButton = new Pattern(filepath + "OpenButton.PNG");

Passo 4) As declarações abaixo envolvem a abertura do navegador Chrome com o URL: https://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/image_upload/index.php");

O URL acima é um aplicativo de demonstração para demonstrar a funcionalidade de upload de arquivos.

Passo 5) Clique no botão escolher arquivo usando a instrução abaixo

driver.findElement(By.xpath(".//*[@id='photoimg']")).click();

Passo 6) Aguarde o pop-up do Windows aparecer. O método Wait é usado para lidar com o atraso associado à abertura de janelas pop-up após clicar no botão navegar.

s.wait(fileInputTextBox, 20);

Passo 7) Digite o caminho do arquivo na caixa de texto do arquivo de entrada e clique no botão Abrir

s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);

Passo 8) Feche o navegador

driver.close();

Saída:

Inicialmente, o script abre o navegador Chrome

Exemplo de código para upload de arquivo usando Sikuli

Ao clicar no botão 'Escolher arquivo', a tela pop-up do arquivo do Windows aparecerá. Insere os dados na caixa de texto de entrada de arquivo e clica no botão 'Abrir'

Exemplo de código para upload de arquivo usando Sikuli

A tela abaixo é exibida quando o upload do arquivo é concluído e o navegador fecha

Exemplo de código para upload de arquivo usando Sikuli

Conclusão

Sikuli é usado para lidar com objetos flash em uma página da web e janelas pop-up com facilidade. Sikuli é melhor usado quando os elementos da interface do usuário não mudam com frequência. Devido a esta desvantagem, do ponto de vista dos testes de automação, o Sikuli recebe menos preferência em comparação com outras estruturas, como Robot e AutoIT.