Tutorial Sikuli untuk Selenium Otomatisasi

โšก Ringkasan Cerdas

Sikuli mengotomatiskan antarmuka grafis dengan mengenali tangkapan layar yang tersimpan, bukan penunjuk lokasi, yang memungkinkan Selenium uji coba Windows popup, dialog file asli, dan objek Flash yang tidak dapat dijangkau oleh WebDriver saja.

  • ๐Ÿ”˜ Ide inti: Setiap elemen disimpan sebagai PNG, dan Sikuli menemukannya dengan mencocokkan piksel di layar.
  • โ˜‘๏ธ Setup: Tambahkan SikuliX API JAR ke Java jalur pembangunan di samping Selenium JAR.
  • โœ… Kelas layar: Menyediakan fungsi klik, klik ganda, ketik, arahkan kursor, dan cari, yang masing-masing menerima nama gambar.
  • ๐Ÿงช Kelas pola: Membungkus jalur gambar dan menyesuaikan pencocokan melalui similar() dan exact().
  • ๏ธ Contoh yang dikerjakan: Pengguna Chrome melakukan pengujian dengan mengklik Pilih File, kemudian Sikuli mengetikkan jalur file dan mengklik Buka.
  • โš™๏ธ Keterbatasan: Perubahan resolusi atau ukuran piksel akan mengganggu pencocokan dan memunculkan kesalahan FindFailed.

Tutorial Sikuli untuk Selenium Otomatisasi

Di mana Sikuli berada Selenium?

Sikuli adalah alat otomasi pengujian berbasis GUI sumber terbuka. Alat ini terutama digunakan untuk berinteraksi dengan elemen halaman web dan menangani popup berbasis Windows. Sikuli menggunakan teknik โ€œPengenalan Gambarโ€ dan โ€œKontrol GUIโ€ untuk berinteraksi dengan elemen halaman web dan popup Windows. Di Sikuli, semua elemen web diambil sebagai gambar dan disimpan di dalam proyek.

โš ๏ธ Catatan penamaan: Proyek tersebut dipelihara hingga saat ini sebagai berikut: SikuliX, diterbitkan di Maven Central sebagai com.sikulix:sikulixapiNama kelas di bawah ini tidak berubah.

Cara menggunakan Sikuli dengan Selenium Driver web

Sikuli dapat diintegrasikan dengan Selenium WebDriver menggunakan file JAR Sikuli, dalam dua langkah di bawah ini.

Langkah 1) Unduh file JAR Sikuli dari bawah ini URL, dan mantantracSalin isi file ZIP ke dalam sebuah folder.

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

Langkah 2) Buat proyek JAVA baru di Eclipse lalu tambahkan file JAR ke build path, bersama dengan file jar selenium menggunakan Klik Kanan pada proyek -> Build Path -> Configure Build Path, seperti yang ditunjukkan di bawah ini.

File JAR Sikuli ditambahkan ke Java jalur pembangunan di Eclipse Konfigurasi Jalur Build

Setelah Anda menambahkan file JAR ke jalur build proyek, kelas-kelas yang disediakan oleh Sikuli dapat digunakan. Proyek Maven dapat mendeklarasikan artefak yang sama sebagai dependensi.

Kelas layar di Sikuli

Kelas Screen adalah kelas dasar untuk semua metode yang disediakan oleh Sikuli. Kelas Screen berisi metode yang telah ditentukan sebelumnya untuk semua operasi yang umum dilakukan pada elemen layar seperti klik, klik ganda, memberikan input ke kotak teks, mengarahkan kursor, dll. Berikut adalah daftar metode yang umum digunakan yang disediakan oleh kelas Screen.

metode Deskripsi Sintaksis
Klik Metode ini digunakan untuk mengklik elemen di layar menggunakan nama gambar sebagai parameternya.

Layar s = Layar baru();

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

klik ganda Metode ini digunakan untuk mengklik dua kali pada suatu elemen. Metode ini menerima nama gambar sebagai parameter.

Layar s = Layar baru();

s.doubleClick("QA.png");

Tipe Metode ini digunakan untuk memberikan nilai masukan pada suatu elemen. Ia menerima nama gambar dan teks untuk dikirim sebagai parameter.

s.type(โ€œQA.pngโ€,โ€TEKSโ€);

Melayang-layang Metode ini digunakan untuk mengarahkan kursor ke suatu elemen. Ia menerima nama gambar sebagai parameter.

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

Menemukan Metode ini digunakan untuk menemukan elemen tertentu di layar. Ia menerima nama gambar sebagai parameter.

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

Kelas pola di Sikuli

Jika kelas Screen hanya memproses nama gambar biasa, kelas Pattern digunakan untuk mengaitkan file gambar dengan atribut tambahan guna mengidentifikasi elemen secara unik. Kelas ini menerima path gambar sebagai parameter.

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

Berikut ini adalah metode kelas Pola yang paling umum digunakan.

metode Deskripsi Sintaksis
dapatkan Nama File Mengembalikan nama file yang terdapat dalam objek Pola.

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

String nama file = p.getFileName();

mirip Metode ini mengembalikan objek Pola baru dengan kesamaan yang disetel ke nilai tertentu. Ia menerima nilai kesamaan antara 0 hingga 1 sebagai parameter. Sikuli mencari semua elemen yang termasuk dalam rentang kesamaan yang ditentukan dan mengembalikan objek pola baru.

Pola p1 = p.similar(0.7f);

Tepat Metode ini mengembalikan objek pola baru dengan kesamaan yang disetel ke 1. Metode ini hanya mencari kecocokan persis dari elemen yang ditentukan.

Pola p1 = p.exact();

Code Contoh Pengunggahan File menggunakan Sikuli

Kode di bawah ini menjelaskan penggunaan Sikuli untuk mengunggah file di 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 Penjelasan

Langkah 1) Pernyataan pertama melibatkan pengaturan jalur driver yang dapat dieksekusi untuk chrome.

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

โš ๏ธ Catatan versi: Selenium 4 menyelesaikan biner driver melalui Selenium Manajer, jadi baris ini sekarang opsional. Tetap seperti yang tertulis di sumber aslinya.

Langkah 2) Gunakan alat screengrab seperti Snipping Tool untuk mengambil tangkapan layar jendela pop-up 'FileText'Boxdan tombol 'Buka', seperti di bawah ini.

Snipping Tool seleksi atas Windows kotak teks input file pada jendela pop-up unggahan

Beginilah seharusnya tampilan tangkapan layar Anda:

Teks File yang DitangkapBox dan gambar referensi OpenButton yang digunakan oleh aksara Sikuli

Gambar untuk kotak teks input file windows dan tombol buka disimpan ke 'FileTextBox.PNG' dan 'OpenButton.PNG'.

Contoh: Jika Anda ingin mengotomatiskan pengoperasian pembukaan notepad, maka Anda perlu menyimpan gambar ikon desktop untuk notepad ke dalam file PNG dan melakukan operasi klik pada file tersebut.

Dalam kasus kami, sistem mengenali kotak teks input file dan tombol Buka pada Windows popup menggunakan gambar yang disimpan. Jika resolusi layar berubah dari pengambilan gambar ke eksekusi skrip pengujian, perilaku Sikuli akan tidak konsisten. Oleh karena itu, selalu disarankan untuk menjalankan skrip pengujian pada resolusi yang sama saat gambar diambil. Perubahan ukuran piksel gambar akan mengakibatkan Sikuli mengeluarkan pengecualian FindFailed.

Langkah 3) Pernyataan selanjutnya meliputi pembuatan objek untuk kelas Screen dan Pattern. Buat objek layar baru. Tetapkan jalur file yang ingin Anda unggah sebagai parameter ke objek Pola.

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

Langkah 4) Pernyataan di bawah ini melibatkan pembukaan browser Chrome dengan URL dari aplikasi demo pengunggahan file: https://demo.guru99.com/test/image_upload/index.php

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

Langkah 5) Klik tombol pilih file menggunakan pernyataan di bawah ini

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

Langkah 6) Tunggu hingga jendela pop-up muncul. Metode tunggu digunakan untuk menangani penundaan yang terkait dengan pembukaan jendela pop-up setelah mengklik tombol telusuri.

s.wait(fileInputTextBox, 20);

Langkah 7) Ketik jalur file ke kotak teks file input dan klik tombol Buka

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

Langkah 8) Tutup peramban

driver.close();

Keluaran

Awalnya, skrip membuka browser Chrome

Browser Chrome terbuka pada halaman unggah file demo di awal eksekusi.

Klik tombol 'Pilih File', layar pop-up file Windows akan muncul. Masukkan data ke dalam kotak teks Input File dan klik tombol 'Buka'

Windows Jendela pop-up file dengan jalur file yang diketikkan ke dalam kotak teks Input File.

Layar di bawah ini ditampilkan setelah pengunggahan file selesai dan menutup browser

Halaman demo yang mengkonfirmasi bahwa unggahan telah selesai tepat sebelum browser ditutup.

Karena pencocokan bergantung pada piksel, setiap gambar referensi harus diambil ulang setiap kali antarmuka diubah gayanya. Kerentanan itulah mengapa tim hanya menggunakan Sikuli untuk popup. penanganan file WebDriver biasa tidak dapat dijangkau.

Pertanyaan Umum Demo Slot

Gambar referensi tidak cocok di layar. Penyebab umum adalah resolusi yang berbeda, gambar yang diubah ukurannya, tema yang diubah gayanya, atau elemen yang belum terlihat. Ambil ulang gambar pada resolusi saat dijalankan atau dengan kemiripan yang lebih rendah.

Selenium Sikuli mengendalikan DOM browser melalui locator. Sikuli mengendalikan layar melalui tangkapan layar, sehingga dapat mengakses dialog asli yang tidak pernah diekspos oleh DOM. Keduanya digunakan bersama-sama.

Ya. Nyatakan com.sikulix:sikulixapi sebagai dependensi dan Maven menarik API yang sama, tetapping versi dalam file build, bukan sebuah Eclipse jalur pembangunan.

Ya, SikuliX berjalan Windows, Linux dan macOSGambar referensi tidak dapat dipindahkan antar platform karena dekorasi dan font berbeda, sehingga setiap platform membutuhkan tangkapan layarnya sendiri.

Pencocok berbasis pembelajaran mesin mentoleransi pergeseran warna, skala, dan tema yang tidak dapat dilakukan oleh perbandingan piksel, dan dapat menemukan kontrol berdasarkan labelnya. Hal ini mengurangi pekerjaan pengambilan data ulang yang dibutuhkan setelah perancangan ulang.

Kopilot GitHub Draf ini mengatur panggilan Screen dan Pattern serta pengaturan WebDriver di sekitarnya. Namun, draf ini tidak dapat menangkap file PNG, jadi verifikasi setiap jalur gambar yang dihasilkan.

Pencocokan akan terputus ketika antarmuka diubah gayanya atau resolusi berubah, berjalan lebih lambat daripada otomatisasi DOM, dan melaporkan kegagalan dengan kurang jelas. Metode ini cocok untuk antarmuka yang jarang berubah.

Proyek penelitian Sikuli yang asli bukanlah proyek yang sama, tetapi penerusnya adalah proyek tersebut. SikuliX adalah dan menerbitkan artefak sikulixapi yang digunakan di sini. Artikel yang mengutip JAR sikuli-script biasa menjelaskan baris sebelumnya.

Ringkaslah postingan ini dengan: