Sikuli探索实践

本文对sikuli做了简要的介绍,带大家入个门(坑),希望后续感兴趣的同学多多交流。

Sikuli是什么?

它是MIT的研究人员设计的一种新颖的图形脚本语言,计算机用户只须有最基本的编程技能(比如会写print”hello world”),他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。———–《百度百科-sikuli》

百科菌简明扼要地介绍了这个工具/脚本语言,下面来看看我们通过这个sikuli写出来的程序

by虫师

by虫师

有没有不明觉厉~?截图都可以直接放在程序里运行了。

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()方法实现的,这个方法可以实现在电脑屏幕上查找指定的图片。

sikuli1

第二点,sikuli通过java.awt Robot实现(上图左下角)将鼠标和键盘的动作传输到准确地位置。

Sikuli怎么用?

相信通过上面的介绍,大家已经对sikuli有了一定了解,迫不及待想用用了。下面介绍一下sikuli的用法。

【sikuli的界面】

Sikuli IDE的界面

Sikuli IDE的界面

安装好Sikuli IDE后,双击图标打开界面:

  • 界面左侧为函数快捷调用区,列出了最常使用的函数,点击函数名可快速将其插入到编辑区,若该函数需截图作为参数,则自动转入屏幕截图状态;
  • 界面上方为菜单和工具栏;
  • 界面中间为脚本编写区,我们的自测化测试脚本就是在这个区域编写完成;
  • 界面右侧为单元测试信息展示的区域;
  • 界面下半部分为提示信息,不管运行成功与失败,都会给出相应的提示信息。

【sikuli的脚本】

在大体了解sikuli的界面后,我们通过一个小例子来看看sikuli的脚本编写方法。

下图Sikuli脚本实现的功能:访问土豆网首页,分别观看电视剧首页、电影首页、动漫首页的推荐视频。

sikuli2

从这个脚本来说说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实现了对屏幕上指定图片的操作,那么识别图片的精确度、操作图片的准确性是如何把握的呢?

  • 相似度

假设脚本中有这样一个图片“首页”单击脚本中的这个图片时,就会出现下面的界面

sikuli3

我们可以通过图片的样式设置”-“匹配预览”,看到sikuli给出的这个图片在电脑屏幕中的匹配情况,下面有个“相似度”滑动条,调整相似度大小可以控制图片匹配的精确度。相似度越小,匹配越模糊,匹配上的区域越多,下图是将相似度调小后的结果:

sikuli4

  • 位置偏移

在“样式设置”-“目标位置偏移”中,可以设置鼠标点击的位置,也就是目标位置偏移,通过移动下图红圈圈出的“十字”来设置。这在需要键盘输入操作的时候很有用。

sikuli5

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

发表评论