Sikuli Tutorial για Selenium Αυτοματοποίηση

⚡ Έξυπνη Σύνοψη

Το Sikuli αυτοματοποιεί μια γραφική διεπαφή αναγνωρίζοντας αποθηκευμένα στιγμιότυπα οθόνης αντί για εντοπιστές, κάτι που επιτρέπει σε ένα Selenium δοκιμαστική οδήγηση του Windows αναδυόμενα παράθυρα, εγγενή παράθυρα διαλόγου αρχείων και αντικείμενα Flash που το WebDriver από μόνο του δεν μπορεί να προσπελάσει.

  • 🔘 Βασική ιδέα: Κάθε στοιχείο αποθηκεύεται ως PNG και το Sikuli το βρίσκει αντιστοιχίζοντας pixel στην οθόνη.
  • ☑️ Ρύθμιση: Προσθέστε το SikuliX API JAR στο Java χτίστε ένα μονοπάτι δίπλα στο Selenium JAR.
  • Κατηγορία οθόνης: Παρέχει κλικ, διπλό κλικ, πληκτρολόγηση, τοποθέτηση δείκτη και εύρεση, καθένα από τα οποία λαμβάνει ένα όνομα εικόνας.
  • 🧪 Κλάση μοτίβου: Αναδιπλώνει μια διαδρομή εικόνας και συντονίζει την αντιστοίχιση μέσω similar() και exact().
  • Λειτουργικό παράδειγμα: Μια δοκιμή του Chrome κάνει κλικ στην επιλογή Επιλογή αρχείου, στη συνέχεια το Sikuli πληκτρολογεί τη διαδρομή και κάνει κλικ στην επιλογή Άνοιγμα.
  • ⚙️ Περιορισμός: Μια αλλαγή στην ανάλυση ή στο μέγεθος των pixel διακόπτει την αντιστοίχιση και εμφανίζει το σφάλμα FindFailed.

Sikuli Tutorial για Selenium Αυτοματοποίηση

Σε τι βρίσκεται ο Sikuli Selenium?

Σικούλι είναι ένα εργαλείο δοκιμής αυτοματισμού ανοιχτού κώδικα βασισμένο σε GUI. Χρησιμοποιείται κυρίως για την αλληλεπίδραση με στοιχεία ιστοσελίδων και το χειρισμό αναδυόμενων παραθύρων. Το Sikuli χρησιμοποιεί την τεχνική της «Αναγνώρισης εικόνας» και του «Control GUI» για να αλληλεπιδράσει με στοιχεία ιστοσελίδων και αναδυόμενα παράθυρα. Στο Sikuli, όλα τα στοιχεία Ιστού λαμβάνονται ως εικόνες και αποθηκεύονται μέσα στο έργο.

⚠️ Σημείωση ονομασίας: Το έργο διατηρείται σήμερα ως SikuliX, δημοσιεύτηκε στο Maven Central ως com.sikulix:sikulixapiΤα ονόματα των κλάσεων παρακάτω παραμένουν αμετάβλητα.

Πώς να χρησιμοποιήσετε το Sikuli με Selenium Πρόγραμμα οδήγησης Web

Το Sikuli μπορεί να ενσωματωθεί με Selenium WebDriver χρησιμοποιώντας το αρχείο JAR Sikuli, στα δύο παρακάτω βήματα.

Βήμα 1) Λήψη το αρχείο JAR Sikuli από το παρακάτω URLκαι πρώηνtracΜεταφέρετε τα περιεχόμενα του αρχείου ZIP σε έναν φάκελο.

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

Βήμα 2) Δημιουργήστε ένα νέο έργο JAVA στο Eclipse και προσθέστε το αρχείο JAR στη διαδρομή δημιουργίας, μαζί με τα αρχεία jar selenium χρησιμοποιώντας δεξί κλικ στο έργο -> Διαδρομή δημιουργίας -> Ρύθμιση παραμέτρων διαδρομής δημιουργίας, όπως φαίνεται παρακάτω.

Το αρχείο JAR Sikuli προστέθηκε στο Java δημιουργία διαδρομής σε Eclipse Ρύθμιση παραμέτρων διαδρομής δημιουργίας

Μόλις προσθέσετε το αρχείο JAR στη διαδρομή δημιουργίας του έργου, μπορούν να χρησιμοποιηθούν οι κλάσεις που παρέχονται από το Sikuli. Ένα έργο Maven μπορεί να δηλώσει το ίδιο τεχνούργημα ως εξάρτηση.

Μάθημα οθόνης στο Sikuli

Η κλάση Screen είναι η βασική κλάση για όλες τις μεθόδους που παρέχονται από το Sikuli. Η κλάση Screen περιέχει προκαθορισμένες μεθόδους για όλες τις συνήθεις λειτουργίες που εκτελούνται σε στοιχεία οθόνης, όπως κλικ, διπλό κλικ, παροχή εισόδου σε ένα πλαίσιο κειμένου, τοποθέτηση του δείκτη του ποντικιού κ.λπ. Παρακάτω είναι η λίστα με τις συνήθεις μεθόδους που παρέχονται από την κλάση Screen.

Μέθοδος Περιγραφή Σύνταξη
Πατήστε Αυτή η μέθοδος χρησιμοποιείται για να κάνετε κλικ σε ένα στοιχείο στην οθόνη χρησιμοποιώντας το όνομα της εικόνας ως παράμετρο.

Screen s = new Screen();

s.click("QA.png");

διπλό κλικ Αυτή η μέθοδος χρησιμοποιείται για διπλό κλικ σε ένα στοιχείο. Δέχεται το όνομα της εικόνας ως παράμετρο.

Screen s = new Screen();

s.doubleClick(“QA.png”);

Χαρακτηριστικά Αυτή η μέθοδος χρησιμοποιείται για την παροχή τιμής εισόδου σε ένα στοιχείο. Αποδέχεται το όνομα της εικόνας και το κείμενο που θα σταλεί ως παραμέτρους.

s.type("QA.png","TEXT");

Φτερουγίζω Αυτή η μέθοδος χρησιμοποιείται για την τοποθέτηση του ποντικιού πάνω από ένα στοιχείο. Δέχεται το όνομα της εικόνας ως παράμετρο.

s.hover("QA.png");

Εύρεση Αυτή η μέθοδος χρησιμοποιείται για την εύρεση ενός συγκεκριμένου στοιχείου στην οθόνη. Δέχεται το όνομα της εικόνας ως παράμετρο.

s.find("QA.png");

Μάθημα μοτίβων στο Sikuli

Όπου η κλάση Screen ενεργεί με βάση ένα απλό όνομα εικόνας, η κλάση Pattern χρησιμοποιείται για να συσχετίσει το αρχείο εικόνας με πρόσθετα χαρακτηριστικά για την μοναδική αναγνώριση του στοιχείου. Λαμβάνει τη διαδρομή της εικόνας ως παράμετρο.

Pattern p = new Pattern(“Path of image”);

Οι παρακάτω είναι οι πιο συχνά χρησιμοποιούμενες μέθοδοι της κλάσης Pattern.

Μέθοδος Περιγραφή Σύνταξη
getFileName Επιστρέφει το όνομα αρχείου που περιέχεται στο αντικείμενο Pattern.

Pattern p = new Pattern(“D:\Demo\QA.png”);

Όνομα αρχείου συμβολοσειράς = p.getFileName();

παρόμοιες Αυτή η μέθοδος επιστρέφει ένα νέο αντικείμενο Pattern με ομοιότητα που έχει οριστεί σε μια καθορισμένη τιμή. Δέχεται την τιμή ομοιότητας μεταξύ 0 και 1 ως παράμετρο. Το Sikuli αναζητά όλα τα στοιχεία που εμπίπτουν στο καθορισμένο εύρος ομοιότητας και επιστρέφει ένα νέο αντικείμενο μοτίβου.

Μοτίβο p1 = p.similar(0.7f);

Ακριβής Αυτή η μέθοδος επιστρέφει ένα νέο αντικείμενο μοτίβου με ομοιότητα σε 1. Αναζητά μόνο μια ακριβή αντιστοίχιση του καθορισμένου στοιχείου.

Μοτίβο p1 = p.exact();

Code Παράδειγμα για μεταφόρτωση αρχείου χρησιμοποιώντας το Sikuli

Ο παρακάτω κώδικας εξηγεί τη χρήση του Sikuli για μεταφόρτωση αρχείων στο 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 εξήγηση

Βήμα 1) Η πρώτη δήλωση περιλαμβάνει τον ορισμό της εκτελέσιμης διαδρομής προγράμματος οδήγησης για το chrome.

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

⚠️ Σημείωση έκδοσης: Selenium 4 επιλύει το δυαδικό πρόγραμμα οδήγησης μέσω Selenium Διευθυντής, επομένως αυτή η γραμμή είναι πλέον προαιρετική. Διατηρείται όπως την έγραψε η πηγή.

Βήμα 2) Χρησιμοποιήστε ένα εργαλείο screengrab όπως π.χ Snipping Tool για να τραβήξετε στιγμιότυπα οθόνης του αναδυόμενου παραθύρου 'FileTextBox' και το κουμπί 'Άνοιγμα', όπως παρακάτω.

Snipping Tool επιλογή πάνω από το Windows πλαίσιο κειμένου εισαγωγής αρχείου στο αναδυόμενο παράθυρο μεταφόρτωσης

Έτσι θα πρέπει να φαίνεται το στιγμιότυπο οθόνης σας:

Καταγεγραμμένο ΑρχείοΚείμενοBox και εικόνες αναφοράς OpenButton που χρησιμοποιούνται από το σενάριο Sikuli

Οι εικόνες για το πλαίσιο κειμένου εισαγωγής αρχείου των Windows και το κουμπί ανοίγματος αποθηκεύονται στο "FileTextBox.PNG» και «OpenButton.PNG».

Παράδειγμα: Εάν θέλετε να αυτοματοποιήσετε τη λειτουργία ανοίγματος του σημειωματάριου, τότε πρέπει να αποθηκεύσετε την εικόνα ενός εικονιδίου επιφάνειας εργασίας για το σημειωματάριο σε ένα αρχείο PNG και να εκτελέσετε τη λειτουργία κλικ σε αυτό.

Στην περίπτωσή μας, αναγνωρίζει το πλαίσιο κειμένου εισαγωγής αρχείου και το κουμπί Άνοιγμα στο Windows αναδυόμενο παράθυρο χρησιμοποιώντας τις αποθηκευμένες εικόνες. Εάν η ανάλυση της οθόνης αλλάξει από τη λήψη εικόνας στη δοκιμαστική εκτέλεση σεναρίου, η συμπεριφορά του Sikuli θα ήταν ασυνεπής. Ως εκ τούτου, είναι πάντα σκόπιμο να εκτελείτε το δοκιμαστικό σενάριο στην ίδια ανάλυση στην οποία καταγράφονται οι εικόνες. Η αλλαγή στο μέγεθος των εικονοστοιχείων των εικόνων θα έχει ως αποτέλεσμα ο Sikuli να δημιουργήσει μια εξαίρεση FindFailed.

Βήμα 3) Οι επόμενες δηλώσεις περιλαμβάνουν τη δημιουργία αντικειμένων για κλάσεις Screen και Pattern. Δημιουργήστε ένα νέο αντικείμενο οθόνης. Ορίστε τη διαδρομή του αρχείου που θέλετε να ανεβάσετε ως παράμετρο στο αντικείμενο Pattern.

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

Βήμα 4) Οι παρακάτω δηλώσεις αφορούν το άνοιγμα του προγράμματος περιήγησης Chrome με το URL μιας εφαρμογής μεταφόρτωσης αρχείων επίδειξης: https://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/image_upload/index.php");

Βήμα 5) Κάντε κλικ στο κουμπί επιλογή αρχείου χρησιμοποιώντας την παρακάτω δήλωση

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

Βήμα 6) Περιμένετε να εμφανιστεί το αναδυόμενο παράθυρο των παραθύρων. Η μέθοδος αναμονής χρησιμοποιείται για τη διαχείριση της καθυστέρησης που σχετίζεται με το άνοιγμα των παραθύρων που εμφανίζονται αφού κάνετε κλικ στο κουμπί αναζήτησης.

s.wait(fileInputTextBox, 20);

Βήμα 7) Πληκτρολογήστε τη διαδρομή του αρχείου στο πλαίσιο κειμένου του αρχείου εισόδου και κάντε κλικ στο κουμπί Άνοιγμα

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

Βήμα 8) Κλείστε το πρόγραμμα περιήγησης

driver.close();

Παραγωγή

Αρχικά, το σενάριο ανοίγει το πρόγραμμα περιήγησης chrome

Το πρόγραμμα περιήγησης Chrome άνοιξε στη σελίδα μεταφόρτωσης αρχείου επίδειξης στην αρχή της εκτέλεσης

Κάνοντας κλικ στο κουμπί "Επιλογή αρχείου", θα εμφανιστεί η αναδυόμενη οθόνη αρχείου των Windows. Εισάγει δεδομένα στο πλαίσιο κειμένου Εισαγωγή αρχείου και κάνει κλικ στο κουμπί «Άνοιγμα».

Windows αναδυόμενο παράθυρο αρχείου με τη διαδρομή αρχείου πληκτρολογημένη στο πλαίσιο κειμένου Εισαγωγή αρχείου

Η παρακάτω οθόνη εμφανίζεται μόλις ολοκληρωθεί η μεταφόρτωση του αρχείου και κλείνει το πρόγραμμα περιήγησης

Σελίδα επίδειξης που επιβεβαιώνει ότι η μεταφόρτωση ολοκληρώθηκε λίγο πριν κλείσει το πρόγραμμα περιήγησης

Επειδή η αντιστοίχιση εξαρτάται από τα pixel, επανακτήστε κάθε εικόνα αναφοράς κάθε φορά που αναδιαμορφώνεται η διεπαφή. Αυτή η ευθραυστότητα είναι ο λόγος για τον οποίο οι ομάδες διατηρούν το Sikuli για αναδυόμενα παράθυρα. απλός χειρισμός αρχείων WebDriver δεν μπορεί να φτάσει.

Συχνές Ερωτήσεις

Η εικόνα αναφοράς δεν αντιστοιχίστηκε στην οθόνη. Συνήθεις αιτίες είναι η διαφορετική ανάλυση, η αναπροσαρμοσμένη εικόνα, το αναδιαμορφωμένο θέμα ή το στοιχείο που δεν είναι ακόμη ορατό. Επαναλάβετε την καταγραφή σε ανάλυση εκτέλεσης ή χαμηλότερη ομοιότητα.

Selenium Το Sikuli οδηγεί το DOM του προγράμματος περιήγησης μέσω εντοπιστών. Το Sikuli οδηγεί την οθόνη μέσω στιγμιότυπων οθόνης, έτσι ώστε να φτάνει σε εγγενή παράθυρα διαλόγου που το DOM δεν εκθέτει ποτέ. Τα δύο χρησιμοποιούνται μαζί.

Ναι. Δήλωση com.sikulix:sikulixapi ως εξάρτηση και το Maven τραβάει το ίδιο API, keeping την έκδοση στο αρχείο δημιουργίας αντί για ένα Eclipse διαδρομή κατασκευής.

Ναι, SikuliX τρέχει Windows, Linux και macOSΟι εικόνες αναφοράς δεν είναι φορητές μεταξύ τους, επειδή οι διακοσμήσεις και οι γραμματοσειρές διαφέρουν, επομένως κάθε πλατφόρμα χρειάζεται τις δικές της λήψεις.

Οι αντιστοιχίσεις μηχανικής μάθησης ανέχονται αλλαγές χρώματος, κλίμακας και θέματος που δεν μπορούν να συγκρίνουν τα pixel και μπορούν να βρουν ένα στοιχείο ελέγχου μέσω της ετικέτας του. Αυτό μειώνει την απαιτούμενη εργασία ανάκτησης μετά από έναν επανασχεδιασμό.

GitHub Copilot Προσχέδια κλήσεων οθόνης και μοτίβων και τη ρύθμιση WebDriver γύρω από αυτές. Δεν μπορεί να καταγράψει τα αρχεία PNG, επομένως επαληθεύστε κάθε διαδρομή εικόνας που δημιουργείται.

Η αντιστοίχιση διακόπτεται όταν η διεπαφή αναδιαμορφώνεται ή αλλάζει η ανάλυση, εκτελείται πιο αργά από τον αυτοματισμό DOM και αναφέρει τις βλάβες με λιγότερη σαφήνεια. Είναι κατάλληλη για διεπαφές που αλλάζουν σπάνια.

Το αρχικό ερευνητικό έργο Sikuli δεν είναι, αλλά ο διάδοχός του SikuliX είναι και δημοσιεύει το τεχνούργημα sikulixapi που χρησιμοποιείται εδώ. Άρθρα που αναφέρουν απλά JAR sikuli-script περιγράφουν την προηγούμενη γραμμή.

Συνοψίστε αυτήν την ανάρτηση με: