Tutorial Sikuli per Selenium Automazione

โšก Riepilogo intelligente

Sikuli automatizza un'interfaccia grafica riconoscendo screenshot memorizzati anzichรฉ localizzatori, il che consente a Selenium prova su strada Windows popup, finestre di dialogo native per i file e oggetti Flash che WebDriver da solo non รจ in grado di raggiungere.

  • ๐Ÿ”˜ Idea centrale: Ogni elemento รจ memorizzato come file PNG e Sikuli lo individua confrontando i pixel sullo schermo.
  • โ˜‘๏ธ Setup: Aggiungere il SikuliX API JAR per il Java costruire il percorso accanto al Selenium File JAR.
  • โœ… Classe dello schermo: Offre le funzioni clic, doppio clic, digitazione, passaggio del mouse e ricerca, ognuna delle quali accetta un nome di immagine.
  • ๐Ÿงช Classe modello: Avvolge un percorso immagine e regola la corrispondenza tramite similar() ed exact().
  • ๏ธ Esempio pratico: Un test di Chrome fa clic su Scegli file, quindi Sikuli digita il percorso e fa clic su Apri.
  • โš™๏ธ Limitazione: Una modifica della risoluzione o delle dimensioni in pixel interrompe la corrispondenza e genera l'errore FindFailed.

Tutorial Sikuli per Selenium Automazione

In cosa consiste Sikuli Selenium?

Siculi รจ uno strumento di automazione dei test basato su GUI open source. รˆ utilizzato principalmente per interagire con elementi di pagine web e gestire popup basati su finestre. Sikuli utilizza la tecnica di "Image Recognition" e "Control GUI" per interagire con elementi di pagine web e popup di finestre. In Sikuli, tutti gli elementi web sono presi come immagini e archiviati all'interno del progetto.

โš ๏ธ Nota sulla denominazione: Il progetto รจ mantenuto oggi come SikuliX, pubblicato su Maven Central come com.sikulix:sikulixapiI nomi delle classi riportati di seguito rimangono invariati.

Come usare Sikuli con Selenium Webdriver

Sikuli puรฒ essere integrato con Selenium WebDriver utilizza il file JAR di Sikuli, seguendo i due passaggi descritti di seguito.

Passaggio 1) Scarica il file JAR di Sikuli dal punto seguente URL, ed extracspostare il contenuto del file ZIP in una cartella.

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

Passo 2) Crea un nuovo progetto Java in Eclipse e aggiungi il file JAR al percorso di compilazione, insieme ai file JAR di Selenium, facendo clic con il pulsante destro del mouse sul progetto -> Percorso di compilazione -> Configura percorso di compilazione, come mostrato di seguito.

File JAR di Sikuli aggiunto al Java costruire il percorso in Eclipse Configura il percorso di compilazione

Una volta aggiunto il file JAR al percorso di compilazione del progetto, รจ possibile utilizzare le classi fornite da Sikuli. In alternativa, un progetto Maven puรฒ dichiarare lo stesso artefatto come dipendenza.

Lezione di schermo a Sikuli

La classe Screen รจ la classe base per tutti i metodi forniti da Sikuli. La classe Screen contiene metodi predefiniti per tutte le operazioni comunemente eseguite sugli elementi dello schermo, come clic, doppio clic, inserimento di input in una casella di testo, passaggio del mouse, ecc. Di seguito รจ riportato l'elenco dei metodi piรน comunemente utilizzati forniti dalla classe Screen.

Metodo Descrizione Sintassi
Clicchi Questo metodo viene utilizzato per fare clic su un elemento sullo schermo utilizzando il nome dell'immagine come parametro.

Schermo s = nuovo Schermo();

s.click(โ€œQA.pngโ€);

doppio clic Questo metodo รจ usato per fare doppio clic su un elemento. Accetta il nome dell'immagine come parametro.

Schermo s = nuovo Schermo();

s.doubleClick(โ€œQA.pngโ€);

Tipo Questo metodo viene utilizzato per fornire un valore di input a un elemento. Accetta come parametri il nome dell'immagine e il testo da inviare.

s.type(โ€œQA.png","TESTO");

Librarsi Questo metodo viene utilizzato per passare il mouse sopra un elemento. Accetta il nome dell'immagine come parametro.

s.hover(โ€œQA.pngโ€);

Trovate Questo metodo viene utilizzato per trovare un elemento specifico sullo schermo. Accetta il nome dell'immagine come parametro.

s.find(โ€œQA.pngโ€);

Lezione di modelli a Sikuli

Mentre Screen agisce su un semplice nome di immagine, la classe Pattern viene utilizzata per associare al file immagine attributi aggiuntivi che identificano in modo univoco l'elemento. Accetta come parametro il percorso dell'immagine.

Pattern p = new Pattern(โ€œPath of imageโ€);

Di seguito sono riportati i metodi piรน comunemente utilizzati della classe Pattern.

Metodo Descrizione Sintassi
getNomeFile Restituisce il nome del file contenuto nell'oggetto Pattern.

Modello p = nuovo Modello(โ€œD:\Demo\QA.pngโ€);

String nomefile = p.getFileName();

simile Questo metodo restituisce un nuovo oggetto Pattern con la somiglianza impostata su un valore specificato. Accetta il valore di somiglianza compreso tra 0 e 1 come parametro. Sikuli cerca tutti gli elementi che rientrano nell'intervallo di somiglianza specificato e restituisce un nuovo oggetto modello.

Modello p1 = p.simile(0.7f);

Esatto Questo metodo restituisce un nuovo oggetto modello con somiglianza impostata su 1. Cerca solo una corrispondenza esatta dell'elemento specificato.

Modello p1 = p.esatto();

Code Esempio di caricamento di file tramite Sikuli

Il codice seguente illustra l'utilizzo di Sikuli per il caricamento di file in 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 Spiegazione

Passo 1) La prima istruzione prevede l'impostazione del percorso eseguibile del driver per Chrome.

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

โš ๏ธ Nota sulla versione: Selenium 4 risolve il binario del driver tramite Selenium Responsabile, quindi questa riga ora รจ facoltativa. Viene mantenuta cosรฌ come รจ stata scritta dalla fonte.

Passo 2) Utilizza uno strumento di cattura dello schermo come Snipping Tool per fare screenshot del popup di Windows 'FileTextBox' e il pulsante 'Apri', come mostrato di seguito.

Snipping Tool selezione sulla Windows casella di testo per l'inserimento del file nella finestra a comparsa di caricamento

Ecco come dovrebbe apparire la tua schermata:

FileText acquisitoBox e le immagini di riferimento di OpenButton utilizzate dallo script Sikuli

Le immagini per la casella di testo di input del file di Windows e il pulsante Apri vengono memorizzate su 'FileTextBox.PNG' e 'OpenButton.PNG'.

Esempio: se desideri automatizzare l'operazione di apertura del Blocco note, devi memorizzare l'immagine di un'icona sul desktop per il Blocco note in un file PNG ed eseguire l'operazione di clic su di esso.

Nel nostro caso, riconosce la casella di testo di input del file e il pulsante Apri su Windows popup utilizzando le immagini memorizzate. Se la risoluzione dello schermo cambia dall'acquisizione dell'immagine all'esecuzione dello script di test, il comportamento di Sikuli sarebbe incoerente. Quindi รจ sempre consigliabile eseguire lo script di test alla stessa risoluzione con cui vengono acquisite le immagini. La modifica delle dimensioni in pixel delle immagini comporterร  il lancio di un'eccezione FindFailed da parte di Sikuli.

Passo 3) Le istruzioni successive includono la creazione di oggetti per le classi Screen e Pattern. Crea un nuovo oggetto sullo schermo. Imposta il percorso del file che desideri caricare come parametro nell'oggetto Pattern.

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

Passo 4) Le seguenti affermazioni riguardano l'apertura del browser Chrome con URL di un'applicazione dimostrativa per il caricamento di file: 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) Fare clic sul pulsante Scegli file utilizzando la dichiarazione seguente

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

Passo 6) Attendi che appaia il popup di Windows. Il metodo Wait viene utilizzato per gestire il ritardo associato all'apertura del popup di Windows dopo aver cliccato sul pulsante Browse.

s.wait(fileInputTextBox, 20);

Passo 7) Digitare il percorso del file nella casella di testo del file di input e fare clic sul pulsante Apri

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

Passo 8) Chiudi il browser

driver.close();

Uscita

Inizialmente, lo script apre il browser Chrome

Il browser Chrome si รจ aperto sulla pagina di caricamento del file demo all'inizio dell'esecuzione

Clicca sul pulsante 'Scegli file', apparirร  la schermata popup del file di Windows. Inserisci i dati nella casella di testo File Input e clicca sul pulsante 'Apri'

Windows Finestra di dialogo con il percorso del file digitato nella casella di testo "Input file"

La schermata seguente viene visualizzata una volta completato il caricamento del file e chiude il browser

Pagina demo che conferma il completamento del caricamento poco prima della chiusura del browser.

Poichรฉ la corrispondenza dipende dai pixel, รจ necessario ricatturare ogni immagine di riferimento ogni volta che l'interfaccia viene modificata. Questa fragilitร  รจ il motivo per cui i team riservano Sikuli ai popup. Gestione dei file WebDriver standard non posso raggiungere.

DOMANDE FREQUENTI

L'immagine di riferimento non รจ stata visualizzata correttamente sullo schermo. Le cause piรน comuni sono una risoluzione diversa, un'immagine ridimensionata, un tema modificato o l'elemento non ancora visibile. Eseguire nuovamente l'acquisizione alla risoluzione di esecuzione o a una risoluzione inferiore.

Selenium Sikuli gestisce il DOM del browser tramite i localizzatori. Sikuli gestisce lo schermo tramite screenshot, in modo da raggiungere finestre di dialogo native che il DOM non espone mai. I due vengono utilizzati insieme.

Sรฌ. Dichiarare com.sikulix:sikulixapi come dipendenza e Maven scarica la stessa API, mantieniping la versione nel file di build piuttosto che un Eclipse percorso di compilazione.

Sรฌ, SikuliX gira su Windows, Linux e macOSLe immagini di riferimento non sono trasferibili tra le diverse piattaforme, poichรฉ decorazioni e caratteri tipografici differiscono; pertanto, ogni piattaforma richiede le proprie immagini di riferimento.

Gli algoritmi di apprendimento automatico tollerano variazioni di colore, scala e tema che il confronto a livello di pixel non puรฒ gestire, e sono in grado di individuare un elemento di controllo tramite la sua etichetta. Ciรฒ riduce il lavoro di riprogettazione necessario dopo un restyling.

Copilota GitHub Bozze delle chiamate Screen e Pattern e della configurazione di WebDriver ad esse correlata. Non รจ in grado di acquisire i file PNG, quindi verificare ogni percorso immagine generato.

Il matching si interrompe quando l'interfaccia viene modificata nello stile o nella risoluzione, รจ piรน lento dell'automazione del DOM e segnala gli errori in modo meno chiaro. รˆ adatto ad interfacce che cambiano raramente.

Il progetto di ricerca originale di Sikuli non lo รจ, ma il suo successore SikuliX รจ e pubblica l'artefatto sikulixapi utilizzato qui. Gli articoli che citano i JAR in sikuli-script semplice descrivono la linea precedente.

Riassumi questo post con: