Sikuli-tutorial voor Selenium Automatisering
Waar zit Sikuli in? Selenium?
Sikuli is een open-source GUI-gebaseerde testautomatiseringstool. Het wordt voornamelijk gebruikt voor interactie met elementen van webpagina's en het verwerken van op vensters gebaseerde pop-ups. Sikuli gebruikt de techniek van "Image Recognition" en "Control GUI" om te communiceren met elementen van webpagina's en pop-ups van vensters. In Sikuli worden alle webelementen als afbeeldingen genomen en opgeslagen in het project.
Hoe Sikuli te gebruiken Selenium Webstuurprogramma
Sikuli kan worden geïntegreerd met Selenium Webdriver met behulp van het Sikuli JAR-bestand.
Hieronder vindt u een lijst met stappen voor het configureren van Sikuli met Selenium WebDriver.
Stap 1) Downloaden het Sikuli JAR-bestand van de onderstaande URL en extraheer de inhoud van het ZIP-bestand naar een map.
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
Stap 2) Maak een nieuw JAVA-project in Eclipse en voeg het JAR-bestand toe aan het buildpad, samen met de Selenium-JAR-bestanden met behulp van de rechtermuisknop op het project -> Buildpad -> Buildpad configureren
Zodra u het JAR-bestand aan het bouwpad van het project hebt toegevoegd, kunnen de door Sikuli geleverde klassen worden gebruikt.
Schermles in Sikuli
De Screen-klasse is de basisklasse voor alle methoden die door Sikuli worden geleverd. De Screen-klasse bevat vooraf gedefinieerde methoden voor alle veelgebruikte bewerkingen op schermelementen, zoals klikken, dubbelklikken, invoer leveren aan een tekstvak, zweven, enz. Hieronder staat de lijst met veelgebruikte methoden die door de Screen-klasse worden geleverd.
Methode | Beschrijving | Syntaxis |
---|---|---|
Klik | Deze methode wordt gebruikt om op een element op het scherm te klikken met de afbeeldingsnaam als parameter. | Scherm s = nieuw scherm();
s.klik(“QA.png”); |
dubbelklik | Deze methode wordt gebruikt om te dubbelklikken op een element. Het accepteert de afbeeldingsnaam als parameter. | Scherm s = nieuw scherm();
s.doubleClick(“QA.png”); |
Type | Deze methode wordt gebruikt om invoerwaarde aan een element te geven. Het accepteert de afbeeldingsnaam en tekst die als parameters moeten worden verzonden. |
s.type(“QA.png”,”TEKST”); |
Zweven | Deze methode wordt gebruikt om over een element te bewegen. Het accepteert de afbeeldingsnaam als parameter. |
s.hover(“QA.png”); |
Find | Deze methode wordt gebruikt om een specifiek element op het scherm te vinden. Het accepteert de afbeeldingsnaam als parameter. |
s.find(“QA.png”); |
Patroonles in Sikuli
De patroonklasse wordt gebruikt om het afbeeldingsbestand te koppelen aan aanvullende attributen om het element uniek te identificeren. Het neemt het pad van de afbeelding als parameter.
Patroon p = nieuw patroon(“Pad van afbeelding”);
Hieronder staan de meestgebruikte methoden van de klasse Pattern.
Methode | Beschrijving | Syntaxis |
---|---|---|
getBestandsnaam | Retourneert de bestandsnaam in het Pattern-object. |
Patroon p = nieuw patroon(“D:\Demo\QA.png”); String bestandsnaam = p.getFileName(); |
gelijk | Deze methode retourneert een nieuw Pattern-object waarvan de gelijkenis is ingesteld op een opgegeven waarde. Het accepteert de gelijkeniswaarde tussen 0 en 1 als parameter. Sikuli zoekt naar alle elementen die binnen het opgegeven overeenkomstbereik vallen en retourneert een nieuw patroonobject. |
Patroon p1 = p.similar(0.7f); |
Exact | Deze methode retourneert een nieuw patroonobject waarvan de overeenkomst is ingesteld op 1. Er wordt alleen gezocht naar een exacte overeenkomst met het opgegeven element. |
Patroon p1 = p.exact(); |
Codevoorbeeld voor het uploaden van bestanden met Sikuli
Onderstaande code legt het gebruik van Sikuli uit voor het uploaden van bestanden 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(); } }
Code Verklaring:
Stap 1) De eerste verklaring betreft het instellen van het uitvoerbare pad van het stuurprogramma voor Chrome.
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
Stap 2) Gebruik een screengrab-tool zoals Snipping Tool om screenshots te maken van Windows-pop-up 'FileTextBox' en 'Open'-knop.
Zo zou je screenshot eruit moeten zien: -
Afbeeldingen voor het invoertekstvak en de openknop van het Windows-bestand worden opgeslagen in 'FileText'Box.PNG' en 'OpenButton.PNG'.
Sikuli gebruikt de techniek van Beeldherkenning om elementen op het scherm te herkennen. Het vindt elementen op het scherm uitsluitend op basis van hun afbeeldingen.
Voorbeeld: Als u het openen van Kladblok wilt automatiseren, moet u de afbeelding van een bureaubladpictogram voor Kladblok opslaan in een PNG-bestand en er een klikbewerking op uitvoeren.
In ons geval herkent het het invoertekstvak van het bestand en opent de knop op Windows popup met de opgeslagen afbeeldingen. Als de schermresolutie verandert van het vastleggen van afbeeldingen naar het uitvoeren van een testscript, zou het gedrag van Sikuli inconsistent zijn. Daarom is het altijd raadzaam om het testscript uit te voeren op dezelfde resolutie als waarop de afbeeldingen zijn vastgelegd. Verandering in de pixelgrootte van afbeeldingen zal ertoe leiden dat Sikuli een FindFailed-uitzondering gooit.
Stap 3) De volgende instructies omvatten het maken van objecten voor de klassen Screen en Pattern. Maak een nieuw schermobject. Stel het pad van het bestand dat u wilt uploaden in als parameter voor het Pattern-object.
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Stap 4) De onderstaande verklaringen hebben betrekking op het openen van de Chrome-browser met de URL: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
De bovenstaande URL is een demo-applicatie om de functionaliteit voor het uploaden van bestanden te demonstreren.
Stap 5) Klik op de knop Bestand kiezen met behulp van onderstaande verklaring
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Stap 6) Wacht tot de Windows-pop-up verschijnt. De wachtmethode wordt gebruikt om de vertraging te verwerken die gepaard gaat met het openen van Windows-pop-ups na het klikken op de bladerknop.
s.wait(fileInputTextBox, 20);
Stap 7) Typ het bestandspad in het invoertekstvak en klik op de knop Openen
s.type(fileInputTextBox, inputFilePath + "Test.docx"); s.click(openButton);
Stap 8) Sluit de browser
driver.close();
Output:
In eerste instantie opent het script de Chrome-browser
Klikt op de knop 'Kies bestand', het pop-upscherm van Windows-bestanden verschijnt. Voert gegevens in het tekstvak Bestandsinvoer in en klikt op de knop 'Openen'
Het onderstaande scherm wordt weergegeven zodra het uploaden van het bestand is voltooid en de browser wordt gesloten
Conclusie
Sikuli wordt gebruikt om flash-objecten op een webpagina en Windows-pop-ups eenvoudig te verwerken. Sikuli wordt het beste gebruikt wanneer de elementen op de gebruikersinterface niet vaak veranderen. Vanwege dit nadeel krijgt Sikuli vanuit een automatiseringstestperspectief minder voorkeur vergeleken met andere frameworks zoals Robot en AutoIT.