本文对sikuli做了简要的介绍,带大家入个门(坑),希望后续感兴趣的同学多多交流。
Sikuli是什么?
它是MIT的研究人员设计的一种新颖的图形脚本语言,计算机用户只须有最基本的编程技能(比如会写print”hello world”),他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。———–《百度百科-sikuli》
百科菌简明扼要地介绍了这个工具/脚本语言,下面来看看我们通过这个sikuli写出来的程序
有没有不明觉厉~?截图都可以直接放在程序里运行了。
Sikuli可以做什么?
Sikuli automates anything you see on the screen. It uses image recognition to identify and control GUI components. It is useful when there is no easy access to a GUI’s internal or source code.
———– from sikuli主页(http://www.sikuli.org/)
Sikuli是一个使用“视觉图像匹配”方法来自动化图形用户界面(GUI)的工具。在Sikuli中,所有的Web元素应被视为一个图像,并存储在项目中。Sikuli将基于对作为参数传递的图像进行视觉匹配触发GUI交互。
Sikuli对flash对象(不具有ID或名称)非常有用。它在有一个稳定的图形用户界面(例如,GUI组件不可变)的情况下是很有用的。
甚至基于窗口的应用程序也可以使用Sikuli自动化。 Sikuli提供非常友好Sikuli-script.jar,它可以方便地与Selenium web Driver一起使用。我们甚至可以使用Sikuli来自动化Adobe视频音频播放器或网站上的Flash游戏。通过使用简单的API,使得编程更容易。
Sikuli是如何实现的?
Sikuli 的两大核心:图形识别、鼠标键盘动作的传输
第一点,sikuli是基于openCV中的matchTemplate()方法实现的,这个方法可以实现在电脑屏幕上查找指定的图片。
第二点,sikuli通过java.awt Robot实现(上图左下角)将鼠标和键盘的动作传输到准确地位置。
Sikuli怎么用?
相信通过上面的介绍,大家已经对sikuli有了一定了解,迫不及待想用用了。下面介绍一下sikuli的用法。
【sikuli的界面】
安装好Sikuli IDE后,双击图标打开界面:
- 界面左侧为函数快捷调用区,列出了最常使用的函数,点击函数名可快速将其插入到编辑区,若该函数需截图作为参数,则自动转入屏幕截图状态;
- 界面上方为菜单和工具栏;
- 界面中间为脚本编写区,我们的自测化测试脚本就是在这个区域编写完成;
- 界面右侧为单元测试信息展示的区域;
- 界面下半部分为提示信息,不管运行成功与失败,都会给出相应的提示信息。
【sikuli的脚本】
在大体了解sikuli的界面后,我们通过一个小例子来看看sikuli的脚本编写方法。
下图Sikuli脚本实现的功能:访问土豆网首页,分别观看电视剧首页、电影首页、动漫首页的推荐视频。
从这个脚本来说说sikuli脚本支持的语法,常用的命令
常见的sikuli自带函数说明 | |
Click() | Click(img) 单击图片img |
Type() | Type(img,text)在图片img中输入text |
Wait() | wait(img,Ns)等待图片img出现,在N秒以内 |
OpenApp() | OpenApp(地址)打开指定路径的exe可执行程序 |
Popup() | 弹出一个提示框 |
GetlastMatch() | 获取最近一次匹配的图片 |
由于sikuli是基于jython和java的,它支持用python的语法编写脚本。
- 支持自定义函数
Sikuli支持在脚本中自定义函数,和python的语法一样,通过def定义。定义后的函数,可以在脚本中直接使用。
- 和python一样
变量的定义和python一样,不需要指定变量类型,列表、字符串等等都是支持的
For、if、while这些语句当然也都支持
【sikuli的图片】
Sikuli实现了对屏幕上指定图片的操作,那么识别图片的精确度、操作图片的准确性是如何把握的呢?
- 相似度
假设脚本中有这样一个图片“首页”单击脚本中的这个图片时,就会出现下面的界面
我们可以通过图片的“样式设置”-“匹配预览”,看到sikuli给出的这个图片在电脑屏幕中的匹配情况,下面有个“相似度”滑动条,调整相似度大小可以控制图片匹配的精确度。相似度越小,匹配越模糊,匹配上的区域越多,下图是将相似度调小后的结果:
- 位置偏移
在“样式设置”-“目标位置偏移”中,可以设置鼠标点击的位置,也就是目标位置偏移,通过移动下图红圈圈出的“十字”来设置。这在需要键盘输入操作的时候很有用。
Sikuli的扩展
- 和python结合使用:安装好jython后,通过jpype加载sikuli-script.jar这个库
- 和java结合使用:导入sikuli-script.jar库后,直接调用其中的方法
- 和RobotFramework结合使用:通过RF的远程库接口技术(remote server library interface)将sikuli作为远程库导入
小结
Sikuli的实际用途和优点
- 可以用来自动化Flash对象或Flash网站。
- 可以运用于自动化基于窗口的应用程序。我们可以自动化我们在屏幕上所看到的。
- 提供了简单的API,即所有的方法都可以使用屏幕类对象进行访问。
- 可以简单地与Selenium和所有其他工具集成。
- 使用Sikuli我们可以自动化桌面应用程序。
- 大多数的自动化测试工具不支持flash对象自动化(如Selenium)。Sikuli为自动化Flash对象提供了广泛的支持。
- 它采用强大的“视觉匹配”机制来自动化桌面和Flash对象。
如果您需要了解更多内容,可以
加入QQ群:570982169、486207500
直接询问:010-68438880-8669