Sikuli 是识别和控制 GUI 组件进行 UI 自动化测试的技术,它是有 MIT 的研究人员开发进行设计的。Sikuli 在墨西哥维乔印第安人 (Huichol Indians) 的语言里是上帝之眼的意思,Sikuli 的工作模式与人眼一样,直接识别图像。这个项目的主创人员之一是来自台湾的张琮翔
Sikuli 的最新版本为 Sikuli
X-1.0rc2。在其官方网站下载区可获得为 Mac OS X、Windows 和 Linux 操作系统所提供的安装文件及安装方法简介,
Sikuli 需要 JDK1.6 版本支持。安装好后,打开 Sikuli-IDE ,如下图所示,界面由主菜单栏、工具栏、方法栏、编辑区、日志栏和状态栏六部分组成
Sikuli 提供的常用方法主要有查找、鼠标动作、键盘动作、事件观测 4 种类型
查找主要是对判断元素是否在页面存在以及等待元素
鼠标动作主要是模拟鼠标的点击、双击、右击、移动、拖拽
键盘动作主要是模拟键盘的输入和粘贴
事件观测主要是元素出现、消失以及屏幕区域变化对程序的处理
用 Sikuli-X 做一个简单的减法运算的用例,Sikuli-X 使用的是 Jython 脚本语言,代码如下
import os #导入os包
command = 'taskkill /im calc.exe' #定义一个结束进程的命令字符串
#os.popen('calc.exe') #python打开应用程序的方法
#openApp('calc.exe') #Sikuli打开应用程序的方法
a = App.open("calc.exe") #Sikuli打开应用程序的方法
wait("1481855580087.png") #等待元素出现
click("1481855580087.png") #点击元素
wait("1481855635062.png")
click("1481855635062.png")
wait("1481855675892.png")
click("1481855675892.png")
wait("1481855716969.png")
click("1481855716969.png")
wait("1481855763519.png")
click("1481855763519.png")
wait("1481855820477.png")
click("1481855820477.png")
if exists("66.png"): #断言
print "测试通过"
a.close() #Sikuli关闭应用程序的方法
#os.popen(command) #python关闭应用程序的方法
else:
print "测试失败"
a.close()
#os.popen(command)
运行试一下
运行的时候有点慢,是因为是在整个屏幕上查找元素,可以使用,把查找元素的区域固定,使查找元素速度加快,当然也是有缺点的,程序如果改变区域就无法识别了,代码如下
import os
command = 'taskkill /im calc.exe'
#os.popen('calc.exe')
#openApp('calc.exe')
a = App.open("calc.exe")
Region(596,325,220,315).wait("1481855580087.png")
Region(596,325,220,315).click("1481855580087.png")
Region(596,325,220,315).wait("1481855635062.png")
Region(596,325,220,315).click("1481855635062.png")
Region(596,325,220,315).wait("1481855675892.png")
Region(596,325,220,315).click("1481855675892.png")
Region(596,325,220,315).wait("1481855716969.png")
Region(596,325,220,315).click("1481855716969.png")
Region(596,325,220,315).wait("1481855763519.png")
Region(596,325,220,315).click("1481855763519.png")
Region(596,325,220,315).wait("1481855820477.png")
Region(596,325,220,315).click("1481855820477.png")
if Region(596,325,220,315).exists("66.png"):
print "测试通过"
a.close()
#os.popen(command)
else:
print "测试失败"
os.popen(command)
运行一下,比刚才快了很多