該腳本以頁面中 12 個數字對象的截圖創建帶選擇對象數組,在 result_list 中列出了期望的選取結果顯示。運行時使用 openWeb() 方法自動打開瀏覽器,進入指定頁面。調用 selectObjs() 與 selectRange() 方法的實現 3 種不同的多選方式。腳本中自定義方法的實現,如圖 6 所示。
圖 6. 自定義方法的實現
selectObjs() 方法中調用 Sikuli 的 click() 方法,以傳入的對象截圖列表和 Sikuli 定義的 Key Modifier 為參數,實現了按下 Ctrl 鍵后逐個點擊對象完成多選的動作。
SelectRange() 方法則實現了區域性選取。以 obj_from 和 obj_to 參數指定選區的起始位置和結束位置;或僅使用 obj_from 指定起始位置,同時設定水平和垂直方向的偏移量 x、y 來指定選區。調用 dragDrop() 方法,傳入起始、結束位置,即可完成區域選擇。
驗證方式同實例一所述。
實例三 Web 頁面中的對象拖拽移位
本例主要應用 Sikuli 的 dragDrop() 方法,實現對象的拖拽移位操作。圖 7 中代碼所完成的任務即為通過拖拽的方式,將指定的圖片移動到 Trash 區域中。
圖 7. 拖拽圖片至 Trash 區域
該腳本中,在 droppable 數組中定義需要被移入 Trash 的圖片,以 Trash 區域的標題欄為搜索目標,用 find() 方法獲得 Trash 區域的 Match 類型對象,作為目標區域參數傳入 moveTo() 方法。其中 moveTo() 方法查找當前屏幕顯示中所有與 obj 參數所傳入的圖形相匹配的對象,將其拖拽至 des 所指定的區域。其實現如圖 8 所示。
圖 8. moveTo() 方法的實現
在該方法中,對于圖片縮略圖應用 exists() 方法進行檢索時,進行了圖像相似度(取值區間為 0~1)的調整,Sikuli 中缺省情況下的相似度設置為 0.7,為了在圖片內容類似的情況下進行正確的區分,可用到 similar() 方法適當提高檢索時的相似度,以避免匹配到其他類似區域。
若需確認當前相似度設置下,圖像的匹配情況,可在腳本中單擊截圖對象,激活 Pattern Settings 對話框。在本例中,如單擊第 25 行 droppable 中的第二張截圖,則彈出對話框如圖 9 所示。圖中(1)中所標識區域中,有兩幅圖片分別被紅色和紫紅色高亮顯示。表示在當前的相似度下,這兩幅圖片均被識別為要尋找的對象。顏色越偏紅,則圖片 與截圖的相似度越高,越近似紫色則相似程度越低。調節(2)所標示的 Similarity 滑塊,改變相似度設置,則可看到預覽區域中的匹配區域的數量及顏色變化,從而以此為依據選擇適當的相似度設置,使得程序可以精準唯一地定位目標區域。
圖 9. Pattern Settings 對話框
Sikuli 的優勢及局限
Sikuli 為腳本賦予了人類的視角,讓計算機不單能夠去捕捉后臺的接口數據和返回值,而且能如同人眼一般,“看”到一個真實的 GUI 展現。使用者直接在腳本中引用目標 GUI 元素的截圖來獲取該對象,并指定對其所進行的操作,簡單高效。使得 GUI 自動化擺脫了對應用的內部程序實現的依賴,無需獲取 API,亦無須了解 GUI 的內部代碼實現;忽略了標準控件和非標準控件在操作和獲取上的差異性;普遍適用于所有運行在有圖形用戶界面的操作系統之上的應用,有 GUI 顯示的地方即可被獲取和操作。實時的圖形檢索定位,避免了位移和 UI 重排等位置變化造成的無法準確定位并獲取控件的問題。Python 語法兼容 +Java 內核,為其賦予了很強的擴展性,同時,Open Source 也讓 Sikuli 本身獲得了更多的發展機會和空間。使用 GUI 元素截圖所編制的 Sikuli 腳本具有良好的代碼可讀性,這一點從上述實例場景中能夠有所體會——在這種簡短的腳本中,已基本接近自然語言的表述方式。這樣的一種展現形式和特性使得手 工測試用例與自動化測試腳本的距離大大縮小,使得這兩者之間的自動轉化和整合成為可能。
另外,利用 GUI 截圖進行編程的這種特性使得使用者只需要具有基本的程序設計知識即可快速上手,輕松地創建自動化腳本操作 GUI 界面完成各種操作,大大降低了程序設計的門檻。使得更多的人可以定制個性化的桌面應用。
但在實際應用中,我們也同樣發現,在現階段 Sikuli 仍具有一定的局限性:
依賴屏幕截圖,使其在不同的操作系統上,不同的瀏覽器中,甚至是不同的顯示分辨率下,需要獨立維護一套圖形源文件,對于其跨平臺的能力造成障礙。
由于對于截圖的檢索依賴于實時的桌面顯示,若出現程序邏輯之外的意外界面遮擋或焦點切換(如,彈出窗口等),則會對程序執行造成影響。
IDE 處于開發初級階段,穩定性和易用性存在一定問題。其本身僅支持初級的代碼編輯功能,對于規模較大的代碼開發和調試工作仍存在不便之處。其在 Windows 平臺和 Linux 平臺上的運行穩定性也稍遜于在 MacOSX 上的表現。
因此,現階段若要使用 Sikuli 獨立完成具有一定規模的程序還有些困難,但作為現有自動化測試工具的有效補充,已可以很好的發揮其自身的優勢,為日常工作帶來便利。
總結
本文介紹了圖形化編程技術 Sikuli,使測試人員對 Sikuli 腳本的特點和使用方法有初步的了解。同時通過實例展示如何應用 Sikuli 編寫自動化腳本進行 GUI 交互操作及驗證,分析目前 Sikuli 在應用上所具有的優勢和局限。
原文轉自:http://www.anti-gravitydesign.com