Selenium 自动化 Sikuli 教程

Selenium 中的 Sikuli 是什么?

Sikuli 是一种开源的基于 GUI 的测试自动化工具。它主要用于与网页元素交互以及处理基于 Windows 的弹出窗口。Sikuli 使用“图像识别”和“控制 GUI”技术与网页元素和 Windows 弹出窗口交互。在 Sikuli 中,所有网页元素都被视为图像并存储在项目中。

如何将 Sikuli 与 Selenium Webdriver 结合使用

Sikuli 可以使用 Sikuli JAR 文件与 Selenium Webdriver 集成。

以下是配置 Sikuli 与 Selenium Webdriver 的步骤序列。

步骤 1) 从以下 URL 下载 Sikuli JAR 文件,并将 ZIP 文件的内容解压到一个文件夹中。

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

Use Sikuli With Selenium Webdriver

步骤 2) 在 Eclipse 中创建一个新的 JAVA 项目,并通过右键单击项目 -> 构建路径 -> 配置构建路径,将 JAR 文件添加到构建路径中,以及 Selenium JAR 文件。

use Sikuli With Selenium Webdriver

将 JAR 文件添加到项目构建路径后,即可使用 Sikuli 提供的类。

Sikuli 中的 Screen 类

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 中的 Pattern 类

Pattern 类用于将图像文件与附加属性相关联,以唯一标识元素。它将图像路径作为参数。

Pattern p = new Pattern(“图像路径”);

以下是 Pattern 类最常用的方法。

方法 描述 语法
获取文件名 返回 Pattern 对象中包含的文件名。

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

String filename = p.getFileName();

相似 此方法返回一个新 Pattern 对象,其相似度设置为指定值。它接受 0 到 1 之间的相似度值作为参数。Sikuli 查找所有落在指定相似度范围内的元素并返回一个新的 Pattern 对象。

Pattern p1 = p.similar(0.7f);

精确 此方法返回一个新的 Pattern 对象,其相似度设置为 1。它只查找指定元素的精确匹配。

Pattern 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) 使用屏幕截图工具(如截图工具)截取 Windows 弹出窗口“FileTextBox”和“Open”按钮的屏幕截图。

Code Example For File Upload Using Sikuli

您的屏幕截图应如下所示:-

Code Example For File Upload Using Sikuli

用于 Windows 文件输入文本框和打开按钮的图像分别存储在“FileTextBox.PNG”和“OpenButton.PNG”中。

Sikuli 使用图像识别技术来识别屏幕上的元素。它完全基于图像查找屏幕上的元素。

示例:如果您想自动化打开记事本的操作,则需要将记事本桌面图标的图像存储到 PNG 文件中,并对其执行单击操作。

在我们的案例中,它使用存储的图像识别 Windows 弹出窗口上的文件输入文本框和打开按钮。如果屏幕分辨率从图像捕获到测试脚本执行发生变化,Sikuli 的行为将不一致。因此,始终建议在与捕获图像相同的分辨率下运行测试脚本。图像像素大小的变化将导致 Sikuli 抛出 FindFailed 异常。

步骤 3) 接下来的语句包括创建 Screen 和 Pattern 类的对象。创建一个新的 Screen 对象。将要上传的文件路径设置为 Pattern 对象的参数。

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

步骤 4) 以下语句涉及使用 URL 打开 Chrome 浏览器: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) 等待 Windows 弹出窗口出现。Wait 方法用于处理点击浏览按钮后打开 Windows 弹出窗口的延迟。

s.wait(fileInputTextBox, 20);

步骤 7) 在输入文件文本框中输入文件路径,然后点击“打开”按钮

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

步骤 8) 关闭浏览器

driver.close();

输出

最初,脚本打开 Chrome 浏览器

Code Example For File Upload Using Sikuli

点击“选择文件”按钮,将出现 Windows 文件弹出屏幕。在文件输入文本框中输入数据,然后点击“打开”按钮

Code Example For File Upload Using Sikuli

文件上传完成后,将显示以下屏幕并关闭浏览器

Code Example For File Upload Using Sikuli

结论

Sikuli 用于轻松处理网页上的 Flash 对象和 Windows 弹出窗口。当用户界面上的元素不经常更改时,Sikuli 效果最佳。由于此缺点,从自动化测试的角度来看,Sikuli 的优先级低于 Robot 和 AutoIT 等其他框架。