Tutorial Sikuli para Selenium Completa
⚡ Resumo Inteligente
O Sikuli automatiza uma interface gráfica reconhecendo capturas de tela armazenadas em vez de localizadores, o que permite que um Selenium Faça um test drive no Windows Janelas pop-up, diálogos de arquivos nativos e objetos Flash que o WebDriver sozinho não consegue acessar.
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.
⚠️ Nota sobre a nomenclatura: O projeto é mantido até hoje como SikuliX, publicado no Maven Central como com.sikulix:sikulixapiOs nomes das classes abaixo permanecem inalterados.
Como usar Sikuli com Selenium Driver da Web
Sikuli pode ser integrado com Selenium WebDriver usando o arquivo JAR do Sikuli, nos dois passos abaixo.
Etapa 1) Baixar o arquivo JAR do Sikuli abaixo URLe extracExtraia 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 Adicione o arquivo JAR ao caminho de construção, juntamente com os arquivos JAR do Selenium, clicando com o botão direito do mouse no projeto -> Caminho de Construção -> Configurar Caminho de Construção, conforme mostrado abaixo.
Depois de adicionar o arquivo JAR ao caminho de construção do projeto, as classes fornecidas pelo Sikuli podem ser usadas. Um projeto Maven pode declarar o mesmo artefato como uma dependência.
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 comuns realizadas em elementos da tela, como clique, clique duplo, entrada em uma caixa de texto, passar o mouse sobre um elemento, etc. Abaixo está a lista dos métodos mais usados da 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
Enquanto a classe `Screen` atua sobre um nome de imagem simples, a classe `Pattern` é usada para associar o arquivo de imagem a atributos adicionais que identificam o elemento de forma única. Ela recebe o caminho da imagem como parâmetro.
Pattern p = new Pattern(“Path of image”);
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(); |
Code Exemplo de upload de arquivos usando Sikuli
O código abaixo explica o uso do Sikuli para upload de arquivos no Chrome.
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(); } }
Code Explicação
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");
⚠️ Nota de versão: Selenium 4 resolve o binário do driver através de Selenium Gerente, então esta linha agora é opcional. Ela será mantida como está escrita na fonte.
Passo 2) Use uma ferramenta de captura de tela como Snipping Tool para tirar screenshots do popup do Windows 'FileTextBoxe o botão 'Abrir', como abaixo.
A sua captura de tela deverá ter esta aparência:
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'.
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 de arquivo e o botão Abrir. 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 instruções abaixo envolvem a abertura do navegador Chrome com o URL de um aplicativo de demonstração para upload de arquivos: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
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
Como a correspondência depende de pixels, é necessário capturar novamente cada imagem de referência sempre que a interface for reestilizada. Essa fragilidade é o motivo pelo qual as equipes reservam o Sikuli para pop-ups. manipulação de arquivos WebDriver simples não pode alcançar.






