Sikuli教程:如何将Sikuli与Selenium结合使用(示例)
Version 2.0.2以后,不再需要安装程序,只需下载IDE或API包并开始使用即可。
在本教程中我们将涉及以下内容:
- 什么是Sikuli?
- Sikuli与Selenium Webdriver的集成
- Sikuli的类Screen
- Sikuli的类Pattern
- 使用Sikuli上传文件的代码示例
- 番外篇-----图片校验:
什么是Sikuli?
官网文档: https://sikulix-2014.readthedocs.io/en/latest/index.html
Sikuli是一个基于GUI的开源自动化工具。它用于与Web页面的元素交互并处理基于windows的弹出窗口(页面)。它使用“图像识别”技术与网页弹出窗口的元素进行交互。Sikuli将Web页面的所有元素视为图像,并根据其图像识别这些元素。当UI元素稳定且不经常变化时,Sikuli是首选。
Sikuli与Selenium Webdriver的集成
Sikuli可以使用Sikuli JAR文件与selenium webdriver集成。
以下序列是使用selenium webdriver配置Sikuli的步骤列表。
【另外一种方式Maven配置Jar包:】
Step 1) 从下面的网址下载Sikuli JAR包:(比如sikulixsetup-1.1.3.jar)
https://launchpad.net/sikuli/+download
cdm 进入到sikulixsetup所在的文件目录,执行Jar包:java -jar sikulixsetup-1.1.3.jar
新生成的jar包如下图所示:
Step 2) 然后在Eclipse中创建一个新的JAVA项目,并使用右键单击project -> Build Path -> Configure Build Path,将JAR文件添加到构建路径以及Selenium jar包。
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.14.0</version>
</dependency>
一旦将JAR文件添加到项目构建路径中,就可以使用Sikuli提供的类。
提示:如果不按照上述的方式操作可能执行不成功,Sikuli一直报错** [error] RunTimeINIT: terminating: libs to export not found on above classpath: /sikulixlibs/windows/libs64 **
Sikuli的类Screen
Screen类是Sikuli提供的所有方法的基类。Screen类包含用于屏幕元素上所有常用操作的预定义方法,如单击、双击、向文本框提供输入、悬停等。下面是Screen类提供的常用方法列表
Method | Description | Syntax(语法) |
---|---|---|
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”); |
Sikuli的类Pattern
Pattern类用于将图像文件与其他属性相关联,以唯一标识元素。它将图像的路径作为参数。
Pattern p = new Pattern(“Path of image”);
下面是模式类最常用的方法。
Method | Description | Syntax(语法) |
---|---|---|
getFileName | 返回Pattern 对象中包含的文件名。 | Pattern p = new Pattern(“D:\Demo\QA.png”); String filename = p.getFileName(); |
similar | 此方法返回一个新的Pattern对象,其相似性设置为指定值。 它接受0到1之间的相似性值作为参数。 Sikuli查找属于指定相似范围的所有元素并返回一个新的模式对象。 | Pattern p1 = p.similar(0.7f); |
Exact | 该方法返回一个新的Pattern对象,相似度设置为1。它只查找指定元素的精确匹配。 | Pattern p1 = p.exact(); |
使用Sikuli上传文件的代码示例
下面的代码解释了如何使用Sikuli在Chrome浏览器中上传文件。
//不要直接下载sikuli.script.jar导入,一定要按照上面的方式生成。
package com.morningstar.sikuli;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", "resources/Driver/chromedriver.exe");String filepath = "resources/";String inputFilePath = "resources/";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://demo.guru99.com/test/image_upload/index.php");// Click on Browse button and handle windows pop up using Sikulidriver.findElement(By.xpath(".//*[@id='photoimg']")).click();s.wait(fileInputTextBox, 20);s.type(fileInputTextBox, inputFilePath + "Test.docx");s.click(openButton);// Close the browserdriver.close();}
}
代码解读:
Step 1)、 第一个语句涉及为chrome设置驱动程序可执行路径。
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
Step 2)、 使用截屏工具等截屏工具对弹出的“FileTextBox”和“Open”按钮进行截屏。
你的截图应该是这样的:
Windows文件输入文本框和打开按钮的图像存储成 “FileTextBox.PNG”和“OpenButton.PNG”。
Sikuli使用图像识别技术来识别屏幕上的元素。它只根据元素的图像在屏幕上找到元素。
例如:如果您想要自动打开记事本,那么您需要将记事本桌面图标的图像存储到PNG文件中,并对其执行单击操作。
在我们上述的例子中,它识别文件输入文本框,并使用存储的图像在Windows弹出窗口上打开按钮。如果屏幕分辨率从图像捕获更改为测试脚本执行,Sikuli的结果将是不一致的。因此,总是建议在捕获图像的同一分辨率上运行测试脚本。图像像素大小的改变将导致Sikuli抛出FindFailed异常。
Step 3)、 接下来的语句包括创建Screen和Pattern类对象。创建一个新的screen对象。设置上载的文件路径设置为Pattern对象的参数。
Screen s = new Screen();
Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Step 4) 以下语句涉及使用chrome浏览器打开URL:http://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver();
driver.get("http://demo.guru99.com/test/image_upload/index.php");
上面的URL是一个演示应用程序,演示文件上传功能。
Step 5) 点击choose file按钮使用下面的语句
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Step 6) 等待弹出窗口出现。 Wait方法用于处理与单击浏览按钮后弹出窗口相关的延迟。
s.wait(fileInputTextBox, 20);
Step 7) 在“输入文件”文本框中输入文件路径,然后单击“打开”按钮
s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);
Step 8) 关闭浏览器
driver.close();
最后:
起初,脚本打开了浏览器
点击“Choose File”按钮,将会出现windows文件弹出窗口。将数据输入文件输入文本框并单击“打开”按钮
完成文件上传并关闭浏览器后,将显示下面的屏幕
结论:
Sikuli用于处理网页上的flash对象和Windows弹出窗口。 当用户界面上的元素不经常更改时,最好使用Sikuli。 由于这个缺点,从自动化测试的角度来看,与其他框架(如Robot和AutoIT)相比,Sikuli的偏好较少。
番外篇-----图片校验:
Sikuli可以用来识别图片中是否有某一部分图片,这个是很有用的,比如一整张图片中检查是否有某块明显的Logo之类的图片。
String imgPath = "xxxx/image.png";
Screen s = new Screen();
boolean test = s.exists(imgPath).isValid();
System.out.println("########Test======"+test);
或者:
String imgPath = "xxxx/image.png";
Screen s = new Screen();
Assert.assertTrue(s.exists(imgPath).isValid(), "can not find the LOGO:" + Page1And16);
.
.
.//基于图片对象查找public static boolean isExist(String iconPath) throws FindFailed{boolean isVaild = false;pattern = new Pattern(iconPath);screen = new Screen();try {//screen.wait(iconPath, 20);Image image = screen.find(pattern).getImage();System.out.println("########IMAGE===="+image);isVaild = image != null;} catch (FindFailed e) {e.printStackTrace();System.err.println(e.getMessage());}clear();return isVaild;}public static void clear(){if(pattern != null){pattern = null;}if(screen != null){screen = null;}}
Sikuli教程:如何将Sikuli与Selenium结合使用(示例)相关推荐
- Sikuli内导入其他sikuli脚本的几个方法
前言 这是工作中整理的知识点,前期使用时,无法保证没有细节错误.目前做web自动化测试了,没有时间去审稿了,如有错误,请留言告知. 方法1:若导入(aa.sikuli)与被导入(testresultl ...
- C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例
C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...
- java this.val$_[Java教程]Jquery $(this).attr和$(this).val用法示例
[Java教程]Jquery $(this).attr和$(this).val用法示例 0 2017-08-17 17:00:11 以下是个人心得整理,有兴趣朋友可以参考参考 $(this).attr ...
- 新版 playCover 键位映射教程(mac 玩 ios 原神键位映射示例)
新版 playCover 键位映射教程(mac 玩 ios 原神键位映射示例) 首先我们先安装好 playCover 与原神,并成功打开游戏,还没有运行成功的可点击 这里 ⇲ 查看游戏安装教程 好的, ...
- python3 selenium安装教程_Python3爬虫利器之Selenium的安装
Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作.对于一些JavaScript渲染的页面来说,这种抓取方式非常有效.下面我们来看看Selenium的安装 ...
- python3 selenium教程_2018年python3与selenium教程第1节
selenium 初体验 selenium自动获取百度搜索结果 源码: from selenium import webdriver from selenium.webdriver.common.by ...
- python基础教程:Python如何基于selenium实现自动登录博客园
这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...
- selenium python高级教程_自动化测试系列 python+selenium的使用教程(一)
Selenium也是一个用于Web应用程序的自动化测试工具,功能强大,可直接运行在浏览器中,支持大部分主流浏览器,支持自动录制动作和自动生成,最重要的是支持多种主流语言包括java,python等. ...
- python教程点击器_python+Selenium自动化测试——输入,点击操作
这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...
最新文章
- excel vba 不可查看
- Spark 架构原理介绍 以及 job、task、stag 概念
- 关于 Delphi 中流的使用(10): 压缩与解压缩进度 - 回复 ilst 的问题
- C#读写txt文件的两种方法介绍[转]
- android下关闭软键盘
- 深入Atlas系列:综合示例(1) - 调用服务器端方法时直接获得客户端具体类型...
- 基于链表的两个非递减有序序列的合并(C++)
- 温故而知新 js 的错误处理机制
- 跨系统服务器data,跨服务器的数据整合方法及系统 Cross-server data integration method and system...
- html加载js那些事
- 毕设题目:Matlab元胞自动机病毒仿真
- Python求二次方程根
- 手写朴素贝叶斯文本分类
- 计算机电子贺卡制作圣诞节,圣诞节电子贺卡怎么制作?
- 白鹤芋一帆风顺花怎么养 一帆风顺花养殖方法及注意事项
- 用微信公众号做淘宝优惠券查券和返利机器人的详细设置教程
- 实现ensp的单臂路由
- Jenkins发版常见问题:ERROR: Exception when publishing, exception message [Failure]
- flutter 微信语言选择_#Flutter项目(3)之仿写微信通讯录界面
- English Learning - L1-2 窥得大段表达门径 2022.12.8 周四