Sikuli 教程 Selenium 省时提效
Sikuli 是什么意思 Selenium?
西库利 是一款基于开源 GUI 的测试自动化工具。它主要用于与网页元素交互并处理基于窗口的弹出窗口。Sikuli 使用“图像识别”和“控制 GUI”技术与网页元素和窗口弹出窗口交互。在 Sikuli 中,所有 Web 元素都被视为图像并存储在项目内部。
如何使用 Sikuli Selenium 网络驱动程序
Sikuli 可以使用 Sikuli JAR 文件与 selenium webdriver 集成。
下面顺序是使用 selenium webdriver 配置 Sikuli 的步骤列表。
步骤1)下载 从以下 URL 下载 Sikuli JAR 文件,并将 ZIP 文件的内容提取到一个文件夹中。
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
步骤2) 在中创建一个新的JAVA项目 Eclipse 并将 JAR 文件添加到构建路径,以及 selenium jar 文件,方法是右键单击项目 -> 构建路径 -> 配置构建路径
将 JAR 文件添加到项目构建路径后,就可以使用 Sikuli 提供的类。
西库里 (Sikuli) 的屏幕课程
Screen 类是 Sikuli 提供的所有方法的基类。Screen 类包含对屏幕元素执行的所有常见操作的预定义方法,例如单击、双击、向文本框提供输入、悬停等。以下是 Screen 类提供的常用方法列表。
付款方式 | 描述 | 句法 |
---|---|---|
点击 | 此方法用于使用图像名称作为参数来点击屏幕上的元素。 | 屏幕 s = 新屏幕();
s.点击(“QA.png”); |
双击 | 此方法用于双击元素。它接受图像名称作为参数。 | 屏幕 s = 新屏幕();
s.双击(“QA.png”); |
类型 | 此方法用于向元素提供输入值。它接受要发送的图像名称和文本作为参数。 |
s.类型(“QA.png”,“TEXT”); |
Hover | 此方法用于将鼠标悬停在元素上。它接受图像名称作为参数。 |
s.悬停(“QA.png”); |
找到最适合您的地方 | 此方法用于查找屏幕上的特定元素。它接受图像名称作为参数。 |
s.find(“QA.png”); |
Sikuli 中的模式类
Pattern 类用于将图像文件与附加属性关联起来,以唯一标识元素。它以图像的路径作为参数。
Pattern p = new Pattern(“图像路径”);
以下是Pattern类最常用的方法。
付款方式 | 描述 | 句法 |
---|---|---|
获取文件名 | 返回 Pattern 对象中包含的文件名。 |
模式 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) 使用截屏工具,例如 Snipping Tool 截取窗口弹出窗口的屏幕截图'FileTextBox' 和 '打开' 按钮。
您的屏幕截图应如下所示:-
Windows 文件输入文本框和打开按钮的图像存储在“FileTextBox.PNG' 和 'OpenButton.PNG'。
Sikuli 使用图像识别技术来识别屏幕上的元素。它仅根据图像来查找屏幕上的元素。
例如:如果您想自动执行打开记事本的操作,那么您需要将记事本的桌面图标图像存储到 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) 以下语句涉及使用以下 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) 等待窗口弹出出现。Wait 方法用于处理单击浏览按钮后打开窗口弹出相关的延迟。
s.wait(fileInputTextBox, 20);
步骤7) 在输入文件文本框中输入文件路径,然后单击打开按钮
s.type(fileInputTextBox, inputFilePath + "Test.docx"); s.click(openButton);
步骤8) 关闭浏览器
driver.close();
输出:
最初,脚本打开 Chrome 浏览器
单击“选择文件”按钮,将出现 Windows 文件弹出屏幕。在文件输入文本框中输入数据,然后单击“打开”按钮
文件上传完成后,关闭浏览器,将显示以下屏幕
结语
Sikuli 可轻松处理网页上的 Flash 对象和 Windows 弹出窗口。当用户界面上的元素不经常更改时,Sikuli 效果最佳。由于这一缺点,从自动化测试的角度来看,与 Robot 和 AutoIT 等其他框架相比,Sikuli 的受欢迎程度较低。