Sikuli 腳本
Sikuli 的腳本編寫(xiě)遵循 Python 語(yǔ)法規(guī)范,其本身提供了多種自定義類(lèi)及其自定義方法,其詳細(xì)介紹可參見(jiàn)其 官方網(wǎng)站文檔。由于 Sikuli 基于 Jython,其核心代碼由 Java 編寫(xiě),可在用戶(hù)自定義的 Java 工程中將其作為 Java 標(biāo)準(zhǔn)類(lèi)庫(kù)進(jìn)行引用,其官方網(wǎng)站亦提供了 JavaDoc供參考。
這里先通過(guò)一個(gè)自動(dòng)打開(kāi) Firefox 瀏覽器,并登錄 Gmail 的簡(jiǎn)單實(shí)例來(lái)快速一覽 Sikuli 腳本的獨(dú)特之處。
圖 2. 自動(dòng)登錄 Gmail
上圖所示的 Sikuli 腳本首先單擊展開(kāi)開(kāi)始菜單,接著單擊 Firefox 圖標(biāo)啟動(dòng)瀏覽器。待 Firefox 的工具欄出現(xiàn)后,以工具欄位置為基準(zhǔn),向右偏移 300 的距離以定位到地址欄并鼠標(biāo)單擊將光標(biāo)置入地址欄,然后在地址欄中輸入 gmail 網(wǎng)址。待登錄界面出現(xiàn),單擊用戶(hù)名輸入框并輸入用戶(hù)名信息,然后鍵入 Tab 鍵,使密碼輸入框獲得焦點(diǎn)并輸入密碼信息,后單擊 Sign in 按鈕完成登錄。
從該示例腳本中不難發(fā)現(xiàn) Sikuli 顯著的特色——將 GUI 對(duì)象的屏幕截圖作為函數(shù)的參數(shù)直接引用,整個(gè)代碼的語(yǔ)義清晰明了,可讀性極強(qiáng)。腳本執(zhí)行過(guò)程中,利用圖像檢索算法分析匹配當(dāng)前屏幕中對(duì)應(yīng)的控件,并對(duì)其應(yīng)用相應(yīng)的鼠標(biāo)或鍵盤(pán)操作。這種方式使得我們?cè)谀_本編寫(xiě)時(shí),既無(wú)需關(guān)心繁瑣的應(yīng)用程序相關(guān) API 亦不用獲取 Web 內(nèi)容對(duì)象。
編輯完成的 Sikuli 腳本可通過(guò) File -> Save 進(jìn)行保存。在 Windows 平臺(tái)上將保存為一個(gè)后綴為 .sikuli 的文件夾,其中包括腳本中所使用到的所有 PNG 圖片、.py 后綴的源代碼以及一份顯示源碼的 HTML 文件。
編寫(xiě)調(diào)試完成的 Sikuli 腳本終可通過(guò)菜單 File->Export executable 生成以 .skl 為后綴的可執(zhí)行文件。生成這種格式的可執(zhí)行文件后,使用命令行工具或直接雙擊該文件即可便捷地運(yùn)行該腳本了。
Sikuli 的應(yīng)用實(shí)例
Sikuli 的出現(xiàn),給 GUI 自動(dòng)化測(cè)試提供了新的思路。通常情況下針對(duì) GUI 的自動(dòng)化測(cè)試多通過(guò)其 API 識(shí)別并獲取 GUI 對(duì)象,進(jìn)而對(duì)其進(jìn)行操作;對(duì)于 GUI 顯示的校驗(yàn)則通過(guò)指定其在屏幕上的位置坐標(biāo)并匹配對(duì)應(yīng)位置上的實(shí)際像素來(lái)完成。前者但復(fù)雜度相對(duì)較高,其局限在于需要了解 GUI 內(nèi)部的代碼實(shí)現(xiàn),依賴(lài)于 API 的開(kāi)放性,所要驗(yàn)證的對(duì)象未必能夠被成功獲取;后者則對(duì) GUI 元素本身的位置有著嚴(yán)格的要求,缺乏靈活度和對(duì) GUI 位移的包容能力,一個(gè)細(xì)微的對(duì)象位置變化即可能?chē)?yán)重影響校驗(yàn)的結(jié)果,但在實(shí)際應(yīng)用場(chǎng)景下,GUI 對(duì)象大小、位置變化和 UI 的重排的情況較為常見(jiàn),使得這種驗(yàn)證方式的穩(wěn)定性和可靠性隨之降低。而 Sikuli 的工作方式完全契合了這兩類(lèi)場(chǎng)景下的需求,可大幅地簡(jiǎn)化操作和驗(yàn)證過(guò)程。接下來(lái)通過(guò)幾個(gè)實(shí)例來(lái)展示如何在一些典型用例中使用 Sikuli 快速完成 GUI 自動(dòng)化。