自动化工具 Sikuli-X 简单的使用

Sorin · 2018年04月06日 · 2373 次阅读

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)  

运行一下,比刚才快了很多

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册