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结合使用(示例)相关推荐

  1. Sikuli内导入其他sikuli脚本的几个方法

    前言 这是工作中整理的知识点,前期使用时,无法保证没有细节错误.目前做web自动化测试了,没有时间去审稿了,如有错误,请留言告知. 方法1:若导入(aa.sikuli)与被导入(testresultl ...

  2. C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例

    C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...

  3. java this.val$_[Java教程]Jquery $(this).attr和$(this).val用法示例

    [Java教程]Jquery $(this).attr和$(this).val用法示例 0 2017-08-17 17:00:11 以下是个人心得整理,有兴趣朋友可以参考参考 $(this).attr ...

  4. 新版 playCover 键位映射教程(mac 玩 ios 原神键位映射示例)

    新版 playCover 键位映射教程(mac 玩 ios 原神键位映射示例) 首先我们先安装好 playCover 与原神,并成功打开游戏,还没有运行成功的可点击 这里 ⇲ 查看游戏安装教程 好的, ...

  5. python3 selenium安装教程_Python3爬虫利器之Selenium的安装

    Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作.对于一些JavaScript渲染的页面来说,这种抓取方式非常有效.下面我们来看看Selenium的安装 ...

  6. python3 selenium教程_2018年python3与selenium教程第1节

    selenium 初体验 selenium自动获取百度搜索结果 源码: from selenium import webdriver from selenium.webdriver.common.by ...

  7. python基础教程:Python如何基于selenium实现自动登录博客园

    这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...

  8. selenium python高级教程_自动化测试系列 python+selenium的使用教程(一)

    Selenium也是一个用于Web应用程序的自动化测试工具,功能强大,可直接运行在浏览器中,支持大部分主流浏览器,支持自动录制动作和自动生成,最重要的是支持多种主流语言包括java,python等. ...

  9. python教程点击器_python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...

最新文章

  1. excel vba 不可查看
  2. Spark 架构原理介绍 以及 job、task、stag 概念
  3. 关于 Delphi 中流的使用(10): 压缩与解压缩进度 - 回复 ilst 的问题
  4. C#读写txt文件的两种方法介绍[转]
  5. android下关闭软键盘
  6. 深入Atlas系列:综合示例(1) - 调用服务器端方法时直接获得客户端具体类型...
  7. 基于链表的两个非递减有序序列的合并(C++)
  8. 温故而知新 js 的错误处理机制
  9. 跨系统服务器data,跨服务器的数据整合方法及系统 Cross-server data integration method and system...
  10. html加载js那些事
  11. 毕设题目:Matlab元胞自动机病毒仿真
  12. Python求二次方程根
  13. 手写朴素贝叶斯文本分类
  14. 计算机电子贺卡制作圣诞节,圣诞节电子贺卡怎么制作?
  15. 白鹤芋一帆风顺花怎么养 一帆风顺花养殖方法及注意事项
  16. 用微信公众号做淘宝优惠券查券和返利机器人的详细设置教程
  17. 实现ensp的单臂路由
  18. Jenkins发版常见问题:ERROR: Exception when publishing, exception message [Failure]
  19. flutter 微信语言选择_#Flutter项目(3)之仿写微信通讯录界面
  20. English Learning - L1-2 窥得大段表达门径 2022.12.8 周四

热门文章

  1. 那些成功学和鸡汤文不会告诉你的
  2. wrapper stopped
  3. 传智博客2015年最新版iOS基础视频_最适合初学者入门
  4. ROS2下机械手的手眼标定
  5. 许少辉论乡村振兴战略下传统村落文化旅游设计获勤写标兵
  6. phpstorm如何打开控制台
  7. davinci-0.3.0安装部署
  8. Python中的np.where()是什么意思(附代码解读)
  9. 18个程序员才看得懂的段子!
  10. uniapp调用蓝牙打印机_【硬货分享】 某网红打印机安全分析(上)