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)
運行一下,比剛纔快了很多