Hướng dẫn Sikuli cho Selenium Tự động hóa
Sikuli có trong gì Selenium?
siuli là một công cụ tự động hóa thử nghiệm dựa trên GUI nguồn mở. Nó chủ yếu được sử dụng để tương tác với các thành phần của trang web và xử lý các cửa sổ bật lên dựa trên cửa sổ. Sikuli sử dụng kỹ thuật “Nhận dạng hình ảnh” và “Điều khiển GUI” để tương tác với các thành phần của trang web và cửa sổ bật lên. Trong Sikuli, tất cả các thành phần web được lấy dưới dạng hình ảnh và được lưu trữ bên trong dự án.
Cách sử dụng Sikuli với Selenium webdriver
Sikuli có thể được tích hợp với trình quản trị web Selenium bằng tệp Sikuli JAR.
Trình tự bên dưới là danh sách các bước để định cấu hình Sikuli với trình quản trị web Selenium.
Bước 1) Tải xuống tệp JAR Sikuli từ URL bên dưới và trích xuất nội dung của tệp ZIP vào một thư mục.
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
Bước 2) Tạo một dự án JAVA mới trong Eclipse và thêm tệp JAR để xây dựng đường dẫn, cùng với các tệp jar selen bằng cách nhấp chuột phải vào dự án -> Đường dẫn xây dựng -> Định cấu hình đường dẫn xây dựng
Khi bạn đã thêm tệp JAR vào đường dẫn xây dựng dự án, bạn có thể sử dụng các lớp do Sikuli cung cấp.
Lớp học màn hình ở Sikuli
Lớp Screen là lớp cơ sở cho tất cả các phương thức do Sikuli cung cấp. Lớp Screen chứa các phương thức được xác định trước cho tất cả các thao tác thường được thực hiện trên các thành phần màn hình như nhấp, nhấp đúp, cung cấp đầu vào cho hộp văn bản, di chuột qua, v.v. Dưới đây là danh sách các phương thức thường được sử dụng do lớp Screen cung cấp.
Phương pháp | Mô tả Chi tiết | cú pháp |
---|---|---|
Nhấp chuột | Phương pháp này được sử dụng để nhấp vào một phần tử trên màn hình bằng cách sử dụng tên hình ảnh làm tham số. | Màn hình s = Màn hình mới();
s.click(“QA.png”); |
nhấp đúp | Phương pháp này được sử dụng để nhấp đúp vào một phần tử. Nó chấp nhận tên hình ảnh làm tham số. | Màn hình s = Màn hình mới();
s.doubleClick(“QA.png”); |
Kiểu | Phương thức này được sử dụng để cung cấp giá trị đầu vào cho một phần tử. Nó chấp nhận tên hình ảnh và văn bản được gửi dưới dạng tham số. |
s.type(“QA.png”,”TEXT”); |
Bay lượn | Phương pháp này được sử dụng để di chuột qua một phần tử. Nó chấp nhận tên hình ảnh làm tham số. |
s.hover(“QA.png”); |
Tìm kiếm | Phương pháp này được sử dụng để tìm một phần tử cụ thể trên màn hình. Nó chấp nhận tên hình ảnh làm tham số. |
s.find(“QA.png”); |
Lớp mẫu ở Sikuli
Lớp mẫu được sử dụng để liên kết tệp hình ảnh với các thuộc tính bổ sung nhằm xác định duy nhất thành phần. Nó lấy đường dẫn của hình ảnh làm tham số.
Mẫu p = Mẫu mới(“Đường dẫn của hình ảnh”);
Sau đây là những phương thức được sử dụng phổ biến nhất của lớp Pattern.
Phương pháp | Mô tả Chi tiết | cú pháp |
---|---|---|
lấy tên tệp | Trả về tên tệp chứa trong đối tượng Pattern. |
Mẫu p = Mẫu mới(“D:\Demo\QA.png”); Tên tệp chuỗi = p.getFileName(); |
tương tự | Phương thức này trả về một đối tượng Mẫu mới có độ tương tự được đặt thành một giá trị được chỉ định. Nó chấp nhận giá trị tương tự từ 0 đến 1 làm tham số. Sikuli tìm kiếm tất cả các phần tử nằm trong phạm vi tương tự đã chỉ định và trả về một đối tượng mẫu mới. |
Mẫu p1 = p.similar(0.7f); |
Chính xác | Phương thức này trả về một đối tượng mẫu mới có độ tương tự được đặt thành 1. Nó chỉ tìm kiếm sự trùng khớp chính xác của phần tử đã chỉ định. |
Mẫu p1 = p.exact(); |
Ví dụ về mã để tải tệp lên bằng Sikuli
Mã bên dưới giải thích việc sử dụng Sikuli để tải tệp lên trong 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(); } }
Giải thích mã:
Bước 1) Câu lệnh đầu tiên liên quan đến việc thiết lập đường dẫn thực thi của trình điều khiển cho chrome.
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
Bước 2) Sử dụng một công cụ chụp màn hình như Snipping Tool để chụp ảnh màn hình cửa sổ bật lên 'FileText'Box' và nút 'Mở'.
Đây là cách ảnh chụp màn hình của bạn trông như thế nào: -
Hình ảnh cho hộp văn bản nhập tệp Windows và nút mở được lưu trữ trong 'FileTextBox.PNG' và 'OpenButton.PNG'.
Sikuli sử dụng kỹ thuật Nhận dạng hình ảnh để nhận dạng các thành phần trên màn hình. Nó tìm thấy các phần tử trên màn hình chỉ dựa trên hình ảnh của chúng.
Ví dụ: Nếu bạn muốn tự động hóa thao tác mở notepad thì bạn cần lưu trữ hình ảnh biểu tượng notepad trên màn hình nền vào một tệp PNG và thực hiện thao tác nhấp chuột vào đó.
Trong trường hợp của chúng tôi, nó nhận dạng hộp văn bản đầu vào tệp và mở nút trên Windows cửa sổ bật lên sử dụng hình ảnh được lưu trữ. Nếu độ phân giải màn hình thay đổi từ chụp ảnh sang thực thi tập lệnh kiểm tra, hành vi của Sikuli sẽ không nhất quán. Do đó, luôn nên chạy tập lệnh kiểm tra ở cùng độ phân giải mà hình ảnh được chụp. Thay đổi kích thước pixel của hình ảnh sẽ dẫn đến Sikuli đưa ra ngoại lệ FindFailed.
Bước 3) Các câu lệnh tiếp theo bao gồm việc tạo các đối tượng cho các lớp Màn hình và Mẫu. Tạo một đối tượng màn hình mới. Đặt đường dẫn của tệp bạn muốn tải lên làm tham số cho đối tượng Mẫu.
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Bước 4) Các câu lệnh dưới đây liên quan đến việc mở trình duyệt Chrome bằng URL: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
URL trên là một ứng dụng demo để minh họa chức năng tải tệp lên.
Bước 5) Nhấp vào nút chọn tệp bằng câu lệnh bên dưới
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Bước 6) Đợi cửa sổ bật lên xuất hiện. Phương pháp Chờ được sử dụng để xử lý độ trễ liên quan đến việc mở cửa sổ bật lên sau khi nhấp vào nút duyệt.
s.wait(fileInputTextBox, 20);
Bước 7) Nhập đường dẫn tệp vào hộp văn bản tệp đầu vào và nhấp vào nút Mở
s.type(fileInputTextBox, inputFilePath + "Test.docx"); s.click(openButton);
Bước 8) Đóng trình duyệt
driver.close();
Đầu ra:
Ban đầu, script mở trình duyệt chrome
Nhấp vào nút 'Chọn tệp', màn hình bật lên của tệp Windows sẽ xuất hiện. Nhập dữ liệu vào hộp văn bản Nhập tệp và nhấp vào nút 'Mở'
Màn hình bên dưới được hiển thị sau khi quá trình tải tệp lên hoàn tất và đóng trình duyệt
Kết luận
Sikuli được sử dụng để xử lý các đối tượng flash trên trang web và các cửa sổ bật lên một cách dễ dàng. Sikuli được sử dụng tốt nhất khi các thành phần trên giao diện người dùng không thay đổi thường xuyên. Do bất lợi này, từ góc độ thử nghiệm tự động, Sikuli ít được ưu tiên hơn so với các khuôn khổ khác như Robot và AutoIT.