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
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
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'.
Esta é a aparência da sua captura de tela: –
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
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'
A tela abaixo é exibida quando o upload do arquivo é concluído e o navegador fecha
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.