Skuli教程:如何将Skuli与Selenium配合使用(示例)

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被给予的优先程度较低。

IT赶路人

专注IT知识分享