Skuli是什么?
Skuli是一个基于开源GUI的测试自动化工具。它主要用来与Skuli互动,所有的网页元素都以图片的形式存储在项目内部。
在本教程中,我们将学习
- Skuli是什么?
- Skuli与Selenium WebDriver的集成
- 锡库里的Pattern类
- 使用Skuli上传文件的代码示例
Skuli与Selenium WebDriver的集成
可以使用Skuli JAR文件将Skuli与Selenium Webdriver集成。
下面的序列是使用Selenium Webdriver配置Skuli的步骤列表。
步骤1)从下面的URL下载Skuli JAR文件。
https://mvnrepository.com/artifact/com.Skulix/Skulixapi/1.1.0
将ZIP文件的内容解压缩到文件夹。
步骤2)在Eclipse中创建一个新的Java项目,并使用右键单击项目->构建路径->配置构建路径,将JAR文件和Selenium JAR文件一起添加到构建路径中
将JAR文件添加到项目构建路径后,就可以使用Skuli提供的类了。
Skuli的Screen类
Screen类是Skuli提供的所有方法的基类。Screen类包含对Screen元素执行的所有常用操作的预定义方法,下面是Screen类提供的常用方法列表。
方法 | 描述 | 语法 |
---|---|---|
Click | 此方法用于使用图像名称作为参数单击屏幕上的元素。 | Screen s = new Screen(); s.click(“QA.png”); |
doubleClick | 此方法用于双击元素。它接受图像名称作为参数。 | Screen s = new Screen(); s.doubleClick(“QA.png”); |
type | 此方法用于向元素提供输入值。它接受要作为参数发送的图像名称和文本。 | s.type(“QA.png”,“TEXT”); |
hover | 此方法用于将鼠标悬停在元素上。它接受图像名称作为参数。 | s.hover(“QA.png”) ; |
find | 此方法用于查找屏幕上的特定元素。它接受图像名称作为参数。 | s.find(“QA.png”); |
Skuli的Pattern类
Pattern类用于将图像文件与其他属性相关联,以唯一标识元素。它将图像的路径作为参数。
Pattern p = new Pattern(“Path of image”);
下面是Pattern类最常用的方法。
方法 | 描述 | 语法 |
---|---|---|
getFileName | 返回模式对象中包含的文件名。 | Pattern p = new Pattern(“D:.png”); String filename = p.getFileName(); |
similar | 此方法返回相似性设置为指定值的新模式对象。Skuli查找在指定相似性范围内的所有元素,并返回新的模式对象。 | Pattern p1 = p.similar(0.7f) ; |
Exact | 此方法返回相似性设置为1的新模式对象。它只查找与指定元素完全匹配的元素。 | Pattern p1 = p.exact() ; |
使用Skuli上传文件的代码示例
下面的代码解释了如何在Firefox中使用Skuli进行文件上传。
package com.Skuli.demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.Skuli.script.FindFailed;
import org.Skuli.script.Pattern;
import org.Skuli.script.Screen;
import org.openqa.selenium.chrome.ChromeDriver;
public class SkuliDemo {
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("http://www.itxiaonv.com/test/image_upload/index.php");
// Click on Browse button and handle windows pop up using Skuli
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)使用截屏工具(如截图工具)截取窗口弹出的“FileTextBox”和“Open”按钮的屏幕截图。
屏幕截图应该是这样的:-
Windows文件输入文本框和打开按钮的图像存储在‘FileTextBox.PNG’和‘OpenButton.PNG’上。
Skuli使用图像识别技术来识别屏幕上的元素。它仅根据元素的图像在屏幕上查找元素。
示例:如果想自动化打开记事本的操作,那么需要将记事本桌面图标的图像存储到一个PNG文件中,并对其执行点击操作。
在我们的示例中,它识别文件输入文本框并使用存储的图像打开Windows弹出窗口上的按钮。如果屏幕更改了图像的像素大小,将导致Skuli抛出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:http://www.itxiaonv.com/test/image_upload/index.php打开Chrome浏览器
driver = new ChromeDriver();
driver.get("http://www.itxiaonv.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文件弹出屏幕。将数据输入到文件输入文本框中,然后单击“打开”按钮
文件上传完成后,将显示以下屏幕并关闭浏览器
结论:
Skuli用于轻松处理网页和窗口弹出窗口上的flash对象。由于这一缺点,从自动化测试的角度来看,与Robot和AutoIT等其他框架相比,Skuli被给予的优先程度较低。