插入圖片(Insert image):除直接截圖外,用戶也可通過點擊該按鈕導入已有的 PNG 格式圖片文件。
建立屏幕區域(Create region):點擊該按鈕,進入屏幕區域選擇狀態,拖拽定位十字線選取屏幕區域。釋放鼠標左鍵,即可將當前選中區域的屏幕坐標信息插入到編輯區中。
運行(Run):點擊執行當前腳本??旖萱I為 Ctrl+R(Command+R)。
慢速運行(Run in slow motion):點擊后以較慢的速度執行當前腳本,以紅色圓形外框顯式標識每一次圖像查找定位動作,便于程序調試中進行焦點追蹤??旖萱I為 Ctrl+Alt+R(Command+Alt+R)。
左側側邊欄中分類列出了部分常用函數,點擊函數名可快速將其插入到編輯區,若該函數需截圖作為參數,則自動轉入屏幕截圖狀態。下方的狀態欄可用于查看當前行號,與行首 Tab 縮進的層級 ( 列號 )。
Sikuli 腳本
Sikuli 的腳本編寫遵循 Python 語法規范,其本身提供了多種自定義類及其自定義方法,其詳細介紹可參見其 官方網站文檔。由于 Sikuli 基于 Jython,其核心代碼由 Java 編寫,可在用戶自定義的 Java 工程中將其作為 Java 標準類庫進行引用,其官方網站亦提供了 JavaDoc供參考。
這里先通過一個自動打開 Firefox 瀏覽器,并登錄 Gmail 的簡單實例來快速一覽 Sikuli 腳本的獨特之處。
圖 2. 自動登錄 Gmail
上圖所示的 Sikuli 腳本首先單擊展開開始菜單,接著單擊 Firefox 圖標啟動瀏覽器。待 Firefox 的工具欄出現后,以工具欄位置為基準,向右偏移 300 的距離以定位到地址欄并鼠標單擊將光標置入地址欄,然后在地址欄中輸入 gmail 網址。待登錄界面出現,單擊用戶名輸入框并輸入用戶名信息,然后鍵入 Tab 鍵,使密碼輸入框獲得焦點并輸入密碼信息,最后單擊 Sign in 按鈕完成登錄。
從該示例腳本中不難發現 Sikuli 最顯著的特色——將 GUI 對象的屏幕截圖作為函數的參數直接引用,整個代碼的語義清晰明了,可讀性極強。腳本執行過程中,利用圖像檢索算法分析匹配當前屏幕中對應的控件,并對其應 用相應的鼠標或鍵盤操作。這種方式使得我們在腳本編寫時,既無需關心繁瑣的應用程序相關 API 亦不用獲取 Web 內容對象。
編輯完成的 Sikuli 腳本可通過 File -> Save 進行保存。在 Windows 平臺上將保存為一個后綴為 .sikuli 的文件夾,其中包括腳本中所使用到的所有 PNG 圖片、.py 后綴的源代碼以及一份顯示源碼的 HTML 文件。
編寫調試完成的 Sikuli 腳本最終可通過菜單 File->Export executable 生成以 .skl 為后綴的可執行文件。生成這種格式的可執行文件后,使用命令行工具或直接雙擊該文件即可便捷地運行該腳本了。
Sikuli 的應用實例
Sikuli 的出現,給 GUI 自動化測試提供了新的思路。通常情況下針對 GUI 的自動化測試多通過其 API 識別并獲取 GUI 對象,進而對其進行操作;對于 GUI 顯示的校驗則通過指定其在屏幕上的絕對位置坐標并匹配對應位置上的實際像素來完成。前者精準但復雜度相對較高,其局限在于需要了解 GUI 內部的代碼實現,依賴于 API 的開放性,所要驗證的對象未必能夠被成功獲取;后者則對 GUI 元素本身的絕對位置有著嚴格的要求,缺乏靈活度和對 GUI 位移的包容能力,一個細微的對象位置變化即可能嚴重影響校驗的結果,但在實際應用場景下,GUI 對象大小、位置變化和 UI 的重排的情況較為常見,使得這種驗證方式的穩定性和可靠性隨之降低。而 Sikuli 的工作方式完全契合了這兩類場景下的需求,可大幅地簡化操作和驗證過程。接下來通過幾個實例來展示如何在一些典型用例中使用 Sikuli 快速完成 GUI 自動化。
實例一 Excel 中驗證鼠標懸停時的單元格注釋顯示
在通常的 GUI 自動化測試中,要完成這一驗證,需要編寫代碼以定位控件、模擬鼠標事件、捕獲對象、判斷顯示結果,實現起來并不輕松。而使用 Sikuli,僅使用下列的簡短腳本即可完成這一任務。
圖 3. 顯示并驗證單元格注釋
圖 3 中所示腳本片段中,從 15-19 行完成了打開 Excel 并創建單元格注釋的過程。單元格注釋的顯示觸發和顯示驗證僅占用了 22-24 三行代碼。所調用的 hover() 方法從當前屏幕顯示上自動匹配截圖參數所示區域,獲取其位置,將鼠標指針懸停于該矩形區域的中心位置,激活注釋顯示。而在 Sikuli“視覺”能力的支持下,驗證注釋是否正確顯示只需用 verifyResult() 方法“一瞥”即可。該方法的實現如圖 4 所示,調用 exists() 方法,即能判斷當前屏幕中是否顯示有相應注釋。
圖 4. verifyResult() 方法的實現
類似的應用還有控件注釋信息的彈出及校驗、Web 應用中懸停效果的校驗等。
實例二 Web 頁面中的多對象選擇
本例中,實現了對 Web 頁面中多個對象的間隔選取和批量框選。其腳本片段如圖 5 所示。
圖 5. Web 頁面中的多對象選取
原文轉自:http://www.anti-gravitydesign.com