Sikuli กวดวิชาสำหรับ Selenium อัตโนมัติ

ซิคูลีอยู่ในอะไร Selenium?

ซิคูลี เป็นเครื่องมือทดสอบอัตโนมัติแบบโอเพ่นซอร์สที่ใช้ GUI เป็นหลัก โดยส่วนใหญ่ใช้สำหรับการโต้ตอบกับองค์ประกอบของหน้าเว็บและการจัดการหน้าต่างป๊อปอัป Sikuli ใช้เทคนิค "การจดจำภาพ" และ "การควบคุม GUI" เพื่อโต้ตอบกับองค์ประกอบของหน้าเว็บและหน้าต่างป๊อปอัป ใน Sikuli องค์ประกอบเว็บทั้งหมดจะถูกถ่ายเป็นรูปภาพและจัดเก็บไว้ภายในโครงการ

วิธีใช้ Sikuli ร่วมกับ Selenium ไดรเวอร์เว็บ

สามารถรวม Sikuli เข้ากับ Selenium webdriver ได้โดยใช้ไฟล์ Sikuli JAR

ลำดับด้านล่างเป็นรายการขั้นตอนในการกำหนดค่า Sikuli ด้วย selenium webdriver

ขั้นตอนที่ 1) ดาวน์โหลด ไฟล์ Sikuli JAR จาก URL ด้านล่าง และแยกเนื้อหาของไฟล์ ZIP ไปยังโฟลเดอร์

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

ใช้ซิคูลีด้วย Selenium ไดรเวอร์เว็บ

ขั้นตอน 2) สร้างโปรเจ็กต์ JAVA ใหม่ใน Eclipse และเพิ่มไฟล์ JAR เพื่อสร้างเส้นทาง พร้อมกับไฟล์ jar ของ Selenium โดยใช้การคลิกขวาที่โครงการ -> สร้างเส้นทาง -> กำหนดค่าสร้างเส้นทาง

ใช้ซิคูลีด้วย Selenium ไดรเวอร์เว็บ

เมื่อคุณเพิ่มไฟล์ JAR ลงในพาธการบิลด์โปรเจ็กต์แล้ว คุณจะสามารถใช้คลาสที่ Sikuli จัดเตรียมไว้ให้ได้

คลาสสกรีนใน Sikuli

คลาส Screen เป็นคลาสพื้นฐานสำหรับวิธีการทั้งหมดที่ Sikuli จัดเตรียมไว้ให้ คลาส Screen ประกอบด้วยวิธีการที่กำหนดไว้ล่วงหน้าสำหรับการดำเนินการทั่วไปทั้งหมดที่ดำเนินการกับองค์ประกอบของหน้าจอ เช่น คลิก คลิกสองครั้ง ป้อนข้อมูลลงในกล่องข้อความ โฮเวอร์ เป็นต้น ด้านล่างนี้คือรายการวิธีการที่ใช้ทั่วไปที่คลาส Screen จัดเตรียมไว้ให้

วิธี Descriptไอออน วากยสัมพันธ์
คลิก วิธีการนี้ใช้ในการคลิกที่องค์ประกอบบนหน้าจอโดยใช้ชื่อรูปภาพเป็นพารามิเตอร์ หน้าจอ s = หน้าจอใหม่ ();

s.click(“QA.png”);

ดับเบิลคลิก วิธีนี้ใช้เพื่อดับเบิลคลิกบนองค์ประกอบ โดยยอมรับชื่อภาพเป็นพารามิเตอร์ หน้าจอ s = หน้าจอใหม่ ();

s.doubleClick(“QA.png”);

ประเภท วิธีการนี้ใช้ในการจัดเตรียมค่าอินพุตให้กับองค์ประกอบ ยอมรับชื่อรูปภาพและข้อความที่จะส่งเป็นพารามิเตอร์

s.type(“QA.png”,”ข้อความ”);

โฉบ วิธีการนี้จะใช้ในการวางเมาส์เหนือองค์ประกอบ ยอมรับชื่อรูปภาพเป็นพารามิเตอร์

s.hover(“QA.png”);

หา วิธีนี้ใช้เพื่อค้นหาองค์ประกอบเฉพาะบนหน้าจอ ยอมรับชื่อรูปภาพเป็นพารามิเตอร์

s.find(“QA.png”);

ชั้นเรียนรูปแบบใน Sikuli

คลาสรูปแบบใช้เพื่อเชื่อมโยงไฟล์รูปภาพกับแอตทริบิวต์เพิ่มเติมเพื่อระบุองค์ประกอบโดยไม่ซ้ำกัน ใช้เส้นทางของรูปภาพเป็นพารามิเตอร์

รูปแบบ p = รูปแบบใหม่ (“เส้นทางของภาพ”);

ต่อไปนี้เป็นวิธีการที่ใช้กันทั่วไปที่สุดของคลาส Pattern

วิธี Descriptไอออน วากยสัมพันธ์
getFileName.getFileName ส่งกลับชื่อไฟล์ที่มีอยู่ในวัตถุรูปแบบ

รูปแบบ p = รูปแบบใหม่ (“D:\Demo\QA.png”);

ชื่อไฟล์สตริง = p.getFileName();

คล้ายคลึงกัน วิธีการนี้จะส่งคืนออบเจ็กต์ Pattern ใหม่ที่มีความคล้ายคลึงกันซึ่งตั้งค่าเป็นค่าที่ระบุ ยอมรับค่าความคล้ายคลึงระหว่าง 0 ถึง 1 เป็นพารามิเตอร์ Sikuli ค้นหาองค์ประกอบทั้งหมดที่อยู่ในช่วงความคล้ายคลึงกันที่ระบุ และส่งคืนออบเจ็กต์รูปแบบใหม่

รูปแบบ p1 = p.similar(0.7f);

แน่นอน เมธอดนี้ส่งคืนออบเจ็กต์รูปแบบใหม่โดยตั้งค่าความคล้ายคลึงกันเป็น 1 โดยจะค้นหาเฉพาะการจับคู่ที่ตรงกันทุกประการขององค์ประกอบที่ระบุ

รูปแบบ p1 = p.exact();

ตัวอย่างโค้ดสำหรับการอัพโหลดไฟล์โดยใช้ Sikuli

โค้ดด้านล่างอธิบายการใช้ Sikuli สำหรับการอัพโหลดไฟล์ 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();
    }
}

คำอธิบายรหัส:

ขั้นตอน 1) คำสั่งแรกเกี่ยวข้องกับการตั้งค่าเส้นทางปฏิบัติการของไดรเวอร์สำหรับ Chrome

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

ขั้นตอน 2) ใช้เครื่องมือ screengrab เช่น Snipping Tool การจับภาพหน้าจอของหน้าต่างป๊อปอัป 'FileTextBox' และปุ่ม 'เปิด'

ตัวอย่างโค้ดสำหรับการอัพโหลดไฟล์โดยใช้ Sikuli

ภาพหน้าจอของคุณควรมีลักษณะดังนี้:-

ตัวอย่างโค้ดสำหรับการอัพโหลดไฟล์โดยใช้ Sikuli

รูปภาพสำหรับกล่องข้อความอินพุตไฟล์ Windows และปุ่มเปิดจะถูกเก็บไว้ใน 'FileTextBox.PNG' และ 'OpenButton.PNG'

Sikuli ใช้เทคนิค Image Recognition เพื่อจดจำองค์ประกอบต่างๆ บนหน้าจอ ค้นหาองค์ประกอบต่างๆ บนหน้าจอตามรูปภาพเท่านั้น

ตัวอย่าง: หากคุณต้องการให้การเปิด Notepad เป็นแบบอัตโนมัติ คุณจะต้องจัดเก็บภาพไอคอนเดสก์ท็อปสำหรับ Notepad ลงในไฟล์ 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");

URL ข้างต้นเป็นแอปพลิเคชันสาธิตเพื่อสาธิตฟังก์ชันการอัปโหลดไฟล์

ขั้นตอน 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();

Output:

เริ่มแรกสคริปต์จะเปิดเบราว์เซอร์ Chrome

ตัวอย่างโค้ดสำหรับการอัพโหลดไฟล์โดยใช้ Sikuli

คลิกที่ปุ่ม 'เลือกไฟล์' หน้าจอป๊อปอัปไฟล์ของ Windows จะปรากฏขึ้น ป้อนข้อมูลลงในกล่องข้อความอินพุตไฟล์ แล้วคลิกปุ่ม 'เปิด'

ตัวอย่างโค้ดสำหรับการอัพโหลดไฟล์โดยใช้ Sikuli

หน้าจอด้านล่างจะปรากฏขึ้นเมื่อการอัพโหลดไฟล์เสร็จสิ้นและปิดเบราว์เซอร์

ตัวอย่างโค้ดสำหรับการอัพโหลดไฟล์โดยใช้ Sikuli

สรุป

Sikuli ใช้สำหรับจัดการวัตถุแฟลชบนเว็บเพจและหน้าต่างแบบป๊อปอัปได้อย่างง่ายดาย Sikuli เหมาะที่สุดที่จะใช้เมื่อองค์ประกอบบนอินเทอร์เฟซผู้ใช้ไม่เปลี่ยนแปลงบ่อยครั้ง เนื่องจากข้อเสียนี้ จากมุมมองของการทดสอบอัตโนมัติ Sikuli จึงได้รับความสำคัญน้อยกว่าเฟรมเวิร์กอื่นๆ เช่น Robot และ AutoIT