Sikuli(X)是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术。它与我们常用的自动化测试技术(工具)有很大的区别。

SikuliX 简介

SikuliX原名是Sikuli,现在改名为SikuliX,可能是因为旧作者停止维护了,由新团队来维护。

SikuliX 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术。它与我们常用的自动化测试技术(工具)有很大的区别。
如图所示
Sikuli_View.jpg
使用图片来作为脚本的识别点/触发点,来进行操作。一种非常神器的方案!!!
OK ,在惊讶过后,我们一起来大体的了解一下这个技术。

什么是Sikuli?

SikuliX可自动执行在运行Windows,Mac或某些Linux / Unix的台式计算机屏幕上看到的所有内容。 它使用OpenCV提供的图像识别功能来识别GUI组件。 在无法轻松访问GUI内部或要操作的应用程序或网页的源代码的情况下,这非常方便。

SikuliX支持作为脚本语言

  • Python语言级别2.7(由Jython支持)
  • 支持运行RobotFramework文本脚本(请参阅文档)
  • Ruby语言级别1.9和2.0(由JRuby支持)
  • JavaScript(由Java脚本引擎支持)

......,您可以将它用于Java编程和任何Java感知编程/脚本语言(Jython,JRuby,Scala,Clojure等)的编程/脚本中。

尽管SikuliX目前在任何移动设备上均不可用,但它可以与台式计算机上的相应仿真器一起使用,或基于VNC解决方案使用。一个基于ADB(Android调试桥)的Android设备解决方案处于试验阶段,

除了在屏幕上定位图像之外,SikuliX还可以运行鼠标和键盘来与标识的GUI元素进行交互。它适用于多监视器环境,甚至适用于某些限制的远程系统。

SikuliX带有基本文本识别(OCR),可用于搜索图像中的文本。此功能由Tesseract支持。

SikuliX是一个Java应用程序,可在Windows,macOS和大多数Linux / Unix系统上运行。

SikuliX有什么用

您想自动化一些重复的任务

  • 应用程序或网页的日常使用
  • 玩游戏
  • IT系统和网络管理

...并且您手边没有足够的工具。

您要测试正在开发的应用程序或网页。

您要创建在指定的应用程序或网页上实时运行的使用文档或培训材料。

您已经具有用于此的工具和工作流程,但是您想添加SikuliX的特定功能来增强方法并提高效率和结果。
使用SikuliX意味着要做所见即所得:您所看到的就是您编写的脚本 ;-)

下载安装

SikuliX对性能需求比较高,我使用阿里云的2h2线程4g的vps有点卡,在甲骨文的2h4线程16g的vps上才流畅运行。
建议使用国外的VPS进行测试,因为国内自动下载环境速度太慢了。

安装java环境

SikuliX的ide程序是用java写的,首先需要安装java环境。我在这里安装的是jdk
由于我不需要使用脚本操作软件。因此就不配置环境变量了。

前往oracle下载Java SE 11 (LTS),点击JDK download按钮即可进入下载界面。
在下载选项中选择jdk-11.0.6_windows-x64_bin.exe下载即可。(可能会要你登录Oracle账号,登录即可)

Windows x64 Installer 151.57 MB jdk-11.0.6_windows-x64_bin.exe

在你使用SikuliX的电脑上双击jdk-11.0.6_windows-x64_bin.exe,点击一下步,默认设置,安装即可。如果不需要用命令终端也就不用设置环境。

安装SikuliX

下载

前往SikuliX官网,最少要阅读完最基础的介绍文档。
前往下载界面https://launchpad.net/sikuli/+download下载1.1.3 release版本。
写教程之所以不使用最新的2.0.3 (SikuliX) release,是因为SikuliX从1.1.4开始暂时移除了左侧的部分常用函数。在初学阶段,左边的提示还是有必要的。

安装

将下载到的sikulixsetup-1.1.3.jar文件拷贝到安装目录下,例如我就是拷贝到桌面上的C:\Users\opc\Desktop\sikulix文件夹中。自动安装的文件都会保存在这个目录内。
直接双击打开sikulixsetup-1.1.3.jar文件,弹出安装向导:

  1. 点击“是”
    sikulix-setup-question.png
  2. 按如图所示,勾上1、2两个选项,然后点击“setup now”。
    sikulix-setup.png
  3. 点击“是”,开始下载环境
    sikulix-setup-download-question.png
  4. 出现这个界面时等待就行了。(如果你在国内,可能会下载失败。只有在路由器那设置大陆白名单/全局才有效,电脑上的代理软件无效)
    sikulix-setup-downloading.png
  5. 点击“是”,开始下载环境
    sikulix-setup-jython.png
  6. 等待安装完成,弹出对话框时,点击确认即可。
    sikulix-setup-wait.png
  7. 安装完成。安装完成不会有任何提示,这个属于正常现象。安装完成后,在安装目录下应该有5个文件:

    runsikulix.cmd:用来命令启动Sikuli IDE
    sikulix.jar:Sikuli IDE需要用到的jar包
    SikuliX-1.1.3-SetupLog.txt:SikuliX安装的日志文件
    sikulixapi.jar:Java API
    sikulixsetup-1.1.3.jar:SikuliX安装包

使用SikuliX

双击sikulix.jar,等待片刻,启动SikulixIDE 1.1.3。如图所示
sikulix.png

SikuliX窗口简介

SikulixIDE 1.1.3按照区域分为4个部分
sikulix-area.png

  1. 菜单栏与工具栏
  2. 部分常用函数
  3. 脚本编辑区域
  4. 调试提示信息区域

使用示例

大体上了解SikulixIDE的界面,下面来做一个自动化的小例子。(官方的第一个小例子为开始运行里输入hello world )这里为打开火狐浏览器,搜索框里输入"hololive",然后点击按钮搜索。

1.点击桌面火狐浏览器图标
方法一:输入双击函数doubleClick(),然后通过截图工具对桌面图标截图,输入。
方法二:点击窗口左侧双击函数doubleClick(),直接进入截图状态。截图完成后直接添加函数到脚本编辑区域。
sikulix-doubleclick.png
2.等待浏览器加载完成
使用函数wait(),这次截取的对象为输入框,输入框加载完成才会进行下一步。
sikulix-wait.png
3.输入搜索内容
使用函数type(, text),text为需要输入的文本内容,如图所示,记得加英文双引号("")。
sikulix-type.png
4.点击搜索
使用函数click(),单机搜索图标
sikulix-click.png
5.优化定位的焦点
由于默认的定位焦点在图片的中心,当第三步:输入搜索内容时,定位输入可能会超出了搜索框的范围,因此要手动修改。
直接点击截图的输入框的图片,即可进入样式设置界面。
选择“目标位置”偏移,使用鼠标滚轮调整图片大小,点击鼠标左键调整中心点的位置,调整完毕后点击确认即可。
sikulix-change-center.png
6.优化匹配阈值
由于有些软件图标故意整的和其他图标差不多,就需要手动调整阈值,来优化匹配效果。
还是直接点击截图的输入框的图片,即可进入样式设置界面。
选择“匹配预览”,使用横轴来调整阈值。
sikulix-threshold.png
7.运行
点击运行/逐步运行,先会要求你设置保存名称和路径,然后查看运行效果。如果有报错,根据报错解决问题。
8.优化操作逻辑
由于SikuliX非常吃性能,导致运行的时候,双击可能压根没反应。因此就需要优化逻辑。
例如第一步双击,就可以变成:移到位置 - 右键 - 等待菜单出现 - 点击打开。最终程序如图所示。
sikulix-optimization.png

总结

SikuliX是我在找“自动化下载转存更新eveonline缓存及下载器实现方案”时找到的一个很好玩的玩具。他和按键精灵有一定的相似之处,但最大的优点就是能匹配图片,用图片在GUI界面做定位。最大的缺点就是对匹配要求有点严苛,不太适合复杂的游戏场景,并且对运行的机器性能要求比较高。
Sikuli在项目之初也总结了它的优缺点。

优点


开源工具。
一个Sikuli的最大优势在于,它可以轻松地自动化Flash对象。
它使自动化Windows应用程序易于实现。
当你测试正在开发的一个应用程序,你不知道的元素的ID/名称,那么你可以用Sikuli。它将检查图像的外观,如果发现匹配,将相应的与图像进行交互。
整体上sikuli小巧、便捷、容易上手。
sikuli脚本可以不经过API的编译器直接自动化搜索到任何你能在屏幕上看到的东西。
对各种程序都适合。
不存在标准控件和非标准控件的问题。
相对位置概念较小,要求不高(但是对象本身尺寸有影响)。
一次编码,多次运行(基于java的)。
Jython和Java的支持,用编程的方式比较容易扩展。

缺点


我们不能保证图像匹配的将是永远准确的。有时,如果屏幕上有两个或更多类似的图像,Sikuli将可能选择错误的图像。
如果图像在像素尺寸方面有所变化,也可能导致“查找失败”的异常。
过多的截图带来的开销。
如截图中的任何一个缺失,会影响程序的执行。
图片的分辨率、色彩、尺寸、唯一性对程序的影响 (如果有两个相同的,无法区分具体哪一个)。
sikuli本身还不完善(处于开发、升级阶段),还有很多程序bug,能否继续发展还是未知数。
只认识当前活动的图标(只有当前桌面有才行)。
用例组织方面有提供但是目前有bug。
采用截图方式,脚本存储占用空间较大。
相似度调整需要手动一个个的调整,工作量大。
目前还不适合设计成一种测试框架。
测试报告的生成,直接用message的话比较弱。但可以使用Jython编程实现拓展功能。

总之,虽然SikuliX并不像神经网络那样高大上,但作为一款“轻量化”“视觉”自动化方案,未来我应该会用的上它。


参考:
SikuliX 的安装与使用
SikuliX by RaiMan

最后修改:2023 年 06 月 22 日
如果觉得我的文章对你有用,请随意赞赏