Tutorial til Sikuli Selenium Automation
Hvad er Sikuli i Selenium?
Sikuli er et open source GUI-baseret testautomatiseringsvรฆrktรธj. Det bruges hovedsageligt til at interagere med elementer pรฅ websider og hรฅndtere vinduesbaserede popups. Sikuli bruger teknikken "Image Recognition" og "Control GUI" til at interagere med elementer af websider og popup-vinduer i vinduer. I Sikuli er alle webelementerne taget som billeder og gemt inde i projektet.
Sรฅdan bruger du Sikuli med Selenium Webdriver
Sikuli kan integreres med selen webdriver ved hjรฆlp af Sikuli JAR-filen.
Nedenstรฅende sekvens er listen over trin til at konfigurere Sikuli med selen webdriver.
Trin 1) Download Sikuli JAR-filen fra nedenstรฅende URL, og udpak indholdet af ZIP-filen til en mappe.
Trin 2) Opret et nyt JAVA-projekt i Eclipse og tilfรธj JAR-filen til build-stien sammen med selen-jar-filer ved hjรฆlp af hรธjreklik pรฅ projektet -> Build Path -> Konfigurer Build Path
Nรฅr du har tilfรธjet JAR-filen til projektets byggesti, kan klasser leveret af Sikuli bruges.
Skรฆrmklasse i Sikuli
Skรฆrmklasse er basisklasserne for alle metoderne leveret af Sikuli. Skรฆrmklassen indeholder foruddefinerede metoder til alle de almindeligt udfรธrte operationer pรฅ skรฆrmelementer sรฅsom klik, dobbeltklik, input til en tekstboks, svรฆv osv. Nedenstรฅende er listen over almindeligt anvendte metoder leveret af skรฆrmklassen.
| Metode | Beskrivelse | Syntaks |
|---|---|---|
| Klik | Denne metode bruges til at klikke pรฅ et element pรฅ skรฆrmen med billednavn som parameter. | Skรฆrm s = ny skรฆrm();
s.click(โQA.pngโ); |
| dobbeltklik | Denne metode bruges til at dobbeltklikke pรฅ et element. Den accepterer billednavn som parameter. | Skรฆrm s = ny skรฆrm();
s.doubleClick(โQA.pngโ); |
| Type | Denne metode bruges til at give inputvรฆrdi til et element. Den accepterer billednavnet og teksten, der skal sendes som parametre. |
s.type(โQA.pngโ,,โTEXTโ); |
| Hover | Denne metode bruges til at holde markรธren over et element. Den accepterer billednavn som parameter. |
s.hover(โQA.pngโ); |
| Finde | Denne metode bruges til at finde et bestemt element pรฅ skรฆrmen. Den accepterer billednavn som parameter. |
s.find(โQA.pngโ); |
Mรธnsterklasse i Sikuli
Mรธnsterklassen bruges til at associere billedfilen med yderligere attributter for entydigt at identificere elementet. Det tager billedets sti som en parameter.
Mรธnster p = nyt mรธnster(โBilledets stiโ);
Fรธlgende er de mest almindeligt anvendte metoder i Pattern-klassen.
| Metode | Beskrivelse | Syntaks |
|---|---|---|
| getFileName | Returnerer filnavnet indeholdt i Pattern-objektet. |
Mรธnster p = nyt mรธnster(โD:\Demo\QA.pngโ); String filnavn = p.getFileName(); |
| lignende | Denne metode returnerer et nyt Pattern-objekt med lighed sat til en specificeret vรฆrdi. Den accepterer lighedsvรฆrdien mellem 0 til 1 som en parameter. Sikuli leder efter alle elementer, der falder inden for det angivne lighedsomrรฅde og returnerer et nyt mรธnsterobjekt. |
Mรธnster p1 = p.similar(0.7f); |
| Prรฆcis | Denne metode returnerer et nyt mรธnsterobjekt med lighed sat til 1. Den leder kun efter en nรธjagtig match af det angivne element. |
Mรธnster p1 = p.exact(); |
Kodeeksempel for filupload ved hjรฆlp af Sikuli
Nedenstรฅende kode forklarer brugen af โโSikuli til filupload i 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();
}
}
Kodeforklaring:
Trin 1) Den fรธrste sรฆtning involverer indstilling af driverens eksekverbare sti til chrome.
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
Trin 2) Brug et screengrab-vรฆrktรธj som f.eks Snipping Tool for at tage skรฆrmbilleder af windows popup 'FileTextBox' og 'ร bn'-knappen.
Sรฅdan skal dit skรฆrmbillede se ud:
Billeder til Windows-filinput tekstboks og รฅben knap gemmes pรฅ 'FileTextBox.PNG' og 'OpenButton.PNG'.
Sikuli bruger teknikken med billedgenkendelse til at genkende elementer pรฅ skรฆrmen. Den finder elementer pรฅ skรฆrmen udelukkende baseret pรฅ deres billeder.
Eksempel: Hvis du vil automatisere betjeningen af โโat รฅbne notesblok, skal du gemme billedet af et skrivebordsikon til notesblok pรฅ en PNG-fil og udfรธre klikoperation pรฅ den.
I vores tilfรฆlde genkender den filinput tekstboksen og รฅbner knappen pรฅ Windows popup ved hjรฆlp af de gemte billeder. Hvis skรฆrmoplรธsningen รฆndres fra billedoptagelse til udfรธrelse af testscript, ville Sikulis adfรฆrd vรฆre inkonsekvent. Derfor er det altid tilrรฅdeligt at kรธre testscriptet med den samme oplรธsning, som billederne er taget med. รndring i pixelstรธrrelse pรฅ billeder vil resultere i, at Sikuli kaster en FindFailed-undtagelse.
Trin 3) De nรฆste udsagn inkluderer oprettelsen af โโobjekter til skรฆrm- og mรธnsterklasser. Opret et nyt skรฆrmobjekt. Indstil stien til den fil, du vil uploade som en parameter til Pattern-objektet.
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Trin 4) Nedenstรฅende udsagn involverer รฅbning af Chrome-browseren med URL'en: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/image_upload/index.php");
Ovenstรฅende URL er en demoapplikation til at demonstrere filoverfรธrselsfunktionalitet.
Trin 5) Klik pรฅ knappen vรฆlg fil ved hjรฆlp af nedenstรฅende erklรฆring
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Trin 6) Vent pรฅ, at popup-vinduet vises. Vent-metoden bruges til at hรฅndtere forsinkelsen, der er forbundet med at รฅbne vinduer, som dukker op efter klik pรฅ gennemse-knappen.
s.wait(fileInputTextBox, 20);
Trin 7) Indtast filstien pรฅ inputfilens tekstboks, og klik pรฅ knappen ร bn
s.type(fileInputTextBox, inputFilePath + "Test.docx"); s.click(openButton);
Trin 8) Luk browseren
driver.close();
Output:
I fรธrste omgang รฅbner scriptet chrome-browseren
Hvis du klikker pรฅ knappen 'Vรฆlg fil', vises popup-skรฆrmen for Windows-filen. Indsรฆtter data i filindtastningsfeltet og klikker pรฅ knappen 'ร bn'
Nedenstรฅende skรฆrm vises, nรฅr filoverfรธrslen er fuldfรธrt og lukker browseren
Konklusion
Sikuli bruges til nemt at hรฅndtere flash-objekter pรฅ en webside og popup-vinduer. Sikuli bruges bedst, nรฅr elementerne pรฅ brugergrรฆnsefladen ikke รฆndres ofte. Pรฅ grund af denne ulempe, fra et automationstestperspektiv, gives Sikuli mindre prรฆference sammenlignet med andre rammer sรฅsom Robot og AutoIT.







