Sikuli Eğitimi Selenium Otomasyon

⚡ Akıllı Özet

Sikuli, konum belirleyiciler yerine kaydedilmiş ekran görüntülerini tanıyarak grafiksel bir arayüzü otomatikleştirir; bu da bir Selenium test sürüşü Windows WebDriver'ın tek başına erişemediği açılır pencereler, yerel dosya iletişim kutuları ve Flash nesneleri.

  • 🔘 Temel fikir: Her öğe PNG formatında saklanır ve Sikuli, ekrandaki pikselleri eşleştirerek onu bulur.
  • ☑️ Kurmak: Eklemek SikuliX API JAR dosyasını şuraya gönderin: Java yolun yanına bir yol inşa edin. Selenium Kavanozlar.
  • ✅ Ekran sınıfı: Her biri resim adını alan tıklama, çift tıklama, yazma, fareyle üzerine gelme ve bulma işlevlerini sağlar.
  • 🧪 Desen sınıfı: Bir resim yolunu sarmalar ve similar() ve exact() fonksiyonları aracılığıyla eşleştirmeyi ayarlar.
  • ️ Çalışılmış örnek: Chrome'da yapılan bir testte "Dosya Seç"e tıklanır, ardından Sikuli dosya yolunu yazar ve "Aç"a tıklar.
  • ⚙️ Sınırlama: Çözünürlük veya piksel boyutu değişikliği eşleştirmeyi bozar ve FindFailed hatası verir.

Sikuli Eğitimi Selenium Otomasyon

Sikuli ne içindedir? Selenium?

sikuli açık kaynaklı GUI tabanlı bir test otomasyon aracıdır. Esas olarak web sayfalarının öğeleriyle etkileşim kurmak ve pencere tabanlı açılır pencereleri yönetmek için kullanılır. Sikuli, web sayfalarının öğeleriyle ve pencere açılır pencereleriyle etkileşim kurmak için “Görüntü Tanıma” ve “Kontrol GUI” tekniğini kullanır. Sikuli'de tüm web öğeleri görüntü olarak alınır ve proje içinde saklanır.

⚠️ İsimlendirme notu: Proje bugün de sürdürülmektedir. SikuliXMaven Central'da yayınlandı com.sikulix:sikulixapiAşağıdaki sınıf adları değişmeden kalmıştır.

Sikuli nasıl kullanılır? Selenium Web sürücüsü

Sikuli ile entegre edilebilir Selenium Aşağıdaki iki adımda Sikuli JAR dosyasını kullanarak WebDriver'ı kullanabilirsiniz.

Adım 1) İndir Aşağıdaki Sikuli JAR dosyasını indirin. URL, ve eskitracZIP dosyasının içeriğini bir klasöre kopyalayın.

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

) 2 Adım İçinde yeni bir JAVA projesi oluşturun Eclipse Aşağıda gösterildiği gibi, projeye sağ tıklayıp "Derleme Yolu -> Derleme Yolunu Yapılandır" seçeneğini kullanarak JAR dosyasını ve Selenium JAR dosyalarını derleme yoluna ekleyin.

Sikuli JAR dosyası eklendi. Java yapım yolunda Eclipse Derleme Yolunu Yapılandır

JAR dosyasını proje derleme yoluna ekledikten sonra, Sikuli tarafından sağlanan sınıflar kullanılabilir. Bunun yerine, bir Maven projesi aynı yapıyı bağımlılık olarak da tanımlayabilir.

Sikuli'de ekran sınıfı

Screen sınıfı, Sikuli tarafından sağlanan tüm metotların temel sınıfıdır. Screen sınıfı, tıklama, çift tıklama, metin kutusuna giriş yapma, fareyle üzerine gelme vb. gibi ekran öğeleri üzerinde yaygın olarak gerçekleştirilen tüm işlemler için önceden tanımlanmış metotlar içerir. Aşağıda, Screen sınıfı tarafından sağlanan yaygın olarak kullanılan metotların listesi bulunmaktadır.

Yöntem Açıklama Sözdizimi
Tıkla Bu yöntem, parametre olarak görüntü adını kullanarak ekrandaki bir öğeye tıklamak için kullanılır.

Ekranlar = yeni Ekran();

s.click(“QA.png”);

çift ​​tıklama Bu yöntem bir elemente çift tıklamak için kullanılır. Parametre olarak resim adını kabul eder.

Ekranlar = yeni Ekran();

s.doubleClick(“QA.png”);

Menşei Bu yöntem bir öğeye giriş değeri sağlamak için kullanılır. Gönderilecek resim adını ve metni parametre olarak kabul eder.

s.type(“QA.png”,”METİN”);

Duraksamak Bu yöntem bir öğenin üzerine gelmek için kullanılır. Parametre olarak resim adını kabul eder.

s.hover(“QA.png”);

bulmak Bu yöntem ekranda belirli bir öğeyi bulmak için kullanılır. Parametre olarak resim adını kabul eder.

s.find(“QA.png”);

Sikuli'de desen sınıfı

Screen sınıfı yalnızca resim adıyla işlem yaparken, Pattern sınıfı ise resim dosyasını ek özelliklerle ilişkilendirerek öğeyi benzersiz şekilde tanımlamak için kullanılır. Parametre olarak resmin yolunu alır.

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

Aşağıda Pattern sınıfının en sık kullanılan metotları listelenmiştir.

Yöntem Açıklama Sözdizimi
getFileName Pattern nesnesinde bulunan dosya adını döndürür.

Desen p = yeni Desen(“D:\Demo\QA.png”);

String dosya adı = p.getFileName();

benzer Bu yöntem, benzerliği belirtilen değere ayarlanmış yeni bir Pattern nesnesi döndürür. Parametre olarak 0 ile 1 arasındaki benzerlik değerini kabul eder. Sikuli, belirtilen benzerlik aralığına giren tüm öğeleri arar ve yeni bir model nesnesi döndürür.

Desen p1 = p.benzer(0.7f);

Tam Bu yöntem, benzerliği 1'e ayarlanmış yeni bir model nesnesi döndürür. Yalnızca belirtilen öğenin tam eşleşmesini arar.

Desen p1 = p.exact();

Code Sikuli kullanarak dosya yükleme örneği

Aşağıdaki kod, Chrome'da dosya yüklemek için Sikuli kullanımını açıklamaktadır.

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 açıklama

) 1 Adım İlk ifade, Chrome için sürücü çalıştırılabilir yolunun ayarlanmasını içerir.

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

⚠️ Sürüm notu: Selenium 4, sürücü ikili dosyasını şu şekilde çözümler: Selenium Yönetici, bu satır artık isteğe bağlı. Kaynak tarafından yazıldığı gibi korunuyor.

) 2 Adım Aşağıdaki gibi bir ekran yakalama aracı kullanın: Snipping Tool Windows açılır penceresinin ekran görüntüsünü almak için 'FileText'Box' ve 'Aç' düğmesi, aşağıdaki gibidir.

Snipping Tool seçim Windows Yükleme açılır penceresindeki dosya giriş metin kutusu

Ekran görüntünüz şöyle görünmelidir:

Yakalanan Dosya MetniBox ve Sikuli komut dosyası tarafından kullanılan OpenButton referans görüntüleri

Windows dosya giriş metin kutusu ve açık düğme için resimler 'FileText'e kaydedilirBox.PNG' ve 'OpenButton.PNG'.

Örnek: Not defteri açma işlemini otomatikleştirmek istiyorsanız, not defteri için masaüstü simgesinin görüntüsünü bir PNG dosyasına kaydetmeniz ve üzerinde tıklama işlemini gerçekleştirmeniz gerekir.

Bizim durumumuzda, dosya giriş metin kutusunu ve Aç düğmesini tanıyor. Windows saklanan görüntüleri kullanan açılır pencere. Ekran çözünürlüğü görüntü yakalamadan test betiği yürütmeye değişirse, Sikuli'nin davranışı tutarsız olur. Bu nedenle, test betiğini görüntülerin yakalandığı çözünürlükte çalıştırmak her zaman tavsiye edilir. Görüntülerin piksel boyutundaki değişiklik, Sikuli'nin FindFailed istisnası atmasına neden olur.

) 3 Adım Sonraki ifadeler Screen ve Pattern sınıfları için nesnelerin oluşturulmasını içermektedir. Yeni bir ekran nesnesi oluşturun. Yüklemek istediğiniz dosyanın yolunu Pattern nesnesine parametre olarak ayarlayın.

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

) 4 Adım Aşağıdaki ifadeler, Chrome tarayıcısını şu şekilde açmayı içerir: URL Bir demo dosya yükleme uygulamasının örneği: https://demo.guru99.com/test/image_upload/index.php

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

) 5 Adım Aşağıdaki ifadeyi kullanarak dosya seç düğmesini tıklayın

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

) 6 Adım Windows açılır penceresinin görünmesini bekleyin. Bekleme yöntemi, gözat düğmesine tıklandıktan sonra Windows açılır penceresinin açılmasıyla ilişkili gecikmeyi yönetmek için kullanılır.

s.wait(fileInputTextBox, 20);

) 7 Adım Giriş dosyası metin kutusuna dosya yolunu yazın ve Aç düğmesine tıklayın

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

) 8 Adım Tarayıcıyı kapat

driver.close();

Çıktı

Başlangıçta, komut dosyası Chrome tarayıcısını açar

Çalıştırmanın başlangıcında Chrome tarayıcısı demo dosya yükleme sayfasında açıldı.

'Dosya Seç' düğmesine tıklandığında, Windows dosya açılır ekranı görünecektir. Dosya Girişi metin kutusuna veri girer ve 'Aç' düğmesine tıklanır

Windows Dosya yolu "Dosya Girişi" metin kutusuna yazıldığında açılan dosya penceresi.

Dosya yükleme işlemi tamamlandığında ve tarayıcı kapatıldığında aşağıdaki ekran görüntülenir

Tarayıcı kapanmadan hemen önce yüklemenin tamamlandığını doğrulayan demo sayfası.

Eşleştirme piksellere bağlı olduğundan, arayüz yeniden tasarlandığında her referans görüntüsünü yeniden yakalayın. Bu kırılganlık nedeniyle ekipler Sikuli'yi açılır pencereler için saklıyor. sade WebDriver dosya işleme ulaşamıyorum.

SSS

Referans görüntü ekranda eşleştirilemedi. Olağan nedenler arasında farklı çözünürlük, yeniden ölçeklendirilmiş görüntü, yeniden tasarlanmış tema veya öğenin henüz görünür olmaması yer alır. Çalıştırma çözünürlüğünde veya daha düşük benzerlikte yeniden yakalama yapın.

Selenium Sikuli, tarayıcı DOM'unu konum belirleyiciler aracılığıyla yönlendirir. Ekranı ise ekran görüntüleri aracılığıyla yönlendirir, böylece DOM'un asla göstermediği yerel diyaloglara ulaşır. İkisi birlikte kullanılır.

Evet. Beyan et com.sikulix:sikulixapi bir bağımlılık olarak ve Maven aynı API'yi çekiyor, devam edin.ping derleme dosyasındaki sürüm, bir sürümden ziyade Eclipse yol oluştur.

Evet, SikuliX çalışır Windows, Linux ve macOSReferans görselleri, süslemeler ve yazı tipleri farklı olduğu için platformlar arasında taşınabilir değildir; bu nedenle her platformun kendi çekimlerine ihtiyacı vardır.

Makine öğrenimi tabanlı eşleştirme algoritmaları, piksel karşılaştırmasının yapamadığı renk, ölçek ve tema değişikliklerine tolerans gösterir ve etiketine göre bir kontrol nesnesi bulabilir. Bu da yeniden tasarım sonrasında gereken yeniden yakalama işini azaltır.

GitHub Yardımcı Pilotu Taslak Ekran ve Desen çağrılarını ve bunların etrafındaki WebDriver kurulumunu içerir. PNG dosyalarını yakalayamaz, bu nedenle oluşturulan her resim yolunu doğrulayın.

Arayüz yeniden şekillendirildiğinde veya çözünürlük değiştiğinde eşleştirme bozulur, DOM otomasyonundan daha yavaş çalışır ve hataları daha az net bir şekilde bildirir. Nadiren değişen arayüzler için uygundur.

Orijinal Sikuli araştırma projesi değil, onun halefi. SikuliX Burada kullanılan sikulixapi yapısını yayınlar. Düz sikuli-script JAR'larını kaynak gösteren makaleler, önceki satırı tanımlar.

Bu yazıyı şu şekilde özetleyin: