與往常一樣,我們試圖爲我們的讀者引進新的東西來學。今天就讓我們來探討一個有趣的GUI自動化工具——Sikuli。
“自動化你看到的一切”使用Sikuli的圖形用戶界面(GUI)的自動化工具——完整的新手引導,通過這些深入講解的Sikuli教程,迅速設置並開始使用Sikuli腳本工具。
Sikuli使用圖像識別方法來識別GUI元素,將你在屏幕上看到的一切自動化。Sikuli腳本允許用戶使用屏幕截圖來自動化GUI交互。
我們把這個系列分爲兩部分:
Sikuli教程#1——它如何工作,如何創建一個簡單的Sikuli項目。
Sikuli教程#2——如何創建Sikuli Maven項目,如何使用Sikuli與Selenium WebDriver自動化網頁。
讓我們先從本系列第1部分開始。
本教程中涉及:
- Sikuli的簡介
- 實際用途
- 優點
- 先決條件
- 創建一個Sikuli Java項目
- 一些Sikuli方法
- 示例
- Sikuli的缺點
簡介
Sikuli是一個使用“視覺圖像匹配”方法來自動化圖形用戶界面(GUI)的工具。在Sikuli中,所有的Web元素應被視爲一個圖像,並存儲在項目中。Sikuli將基於對作爲參數傳遞的圖像進行視覺匹配觸發GUI交互。
Sikuli對flash對象(不具有ID或名稱)非常有用。它在有一個穩定的圖形用戶界面(例如,GUI組件不可變)的情況下是很有用的。
甚至基於窗口的應用程序也可以使用Sikuli自動化。 Sikuli提供非常友好Sikuli-script.jar,它可以方便地與Selenium web Driver一起使用。我們甚至可以使用Sikuli來自動化Adobe視頻音頻播放器或網站上的Flash遊戲。通過使用簡單的API,使得編程更容易。
實際用途
1.Sikuli可以用來自動化Flash對象或Flash網站。
2.它可以運用於自動化基於窗口的應用程序。我們可以自動化我們在屏幕上所看到的。
3.它提供了簡單的API,即所有的方法都可以使用屏幕類對象進行訪問。
4.它可以簡單地與Selenium和所有其他工具集成。
5.使用Sikuli我們可以自動化桌面應用程序。
6.大多數的自動化測試工具不支持flash對象自動化(如Selenium)。Sikuli爲自動化Flash對象提供了廣泛的支持。
7.它採用強大的“視覺匹配”機制來自動化桌面和Flash對象。
優點
- 開源工具。
- 一個Sikuli的最大優勢在於,它可以輕鬆地自動化Flash對象。
- 它使自動化Windows應用程序易於實現。
- 當你測試正在開發的一個應用程序,你不知道的元素的ID/名稱,那麼你可以用Sikuli。它將檢查圖像的外觀,如果發現匹配,將相應的與圖像進行交互。
先決條件:
在開始之前,我們需要下載並安裝以下軟件:
- 任何截圖捕獲工具(如DuckCapture,或qSnap)
- JDK
- Eclipse(此鏈接爲安裝JDK和Eclipse的詳細步驟)
創建Sikuli Java項目的步驟:
步驟#1:Sikuli下載——從這裏下載Sikuli。
步驟#2:解壓您已下載的zip文件。它將包含sikuli-script.jar文件。將該提取文件保存在本地文件系統中。
步驟#3:打開Eclipse。
步驟#4:創建一個Java項目文件——>新建——>Java項目
步驟#5:
1.右鍵單擊項目
2.去創建路徑——>配置創建路徑
3.切換到Libraries選項卡
4.點擊“添加外部JAR”按鈕,添加Sikuli-Script.jar到創建路徑中。
5.點擊“確定”
Sikuli-script.jar,將被添加到您的項目的創建路徑。你就大功告成了。現在你可以開始寫這個項目裏面Sikuli腳本。
一些Sikuli方法:
#1:創建Screen類對象
Screen是由Sikuli提供一個基類。我們需要首先創建該Screen類的對象,纔可以訪問所有Sikuli提供的方法。
語法:
Screen s=new Screen();
#2:單擊一個元素
此方法用於點擊屏幕上的特定圖像。
語法:
s.click(“<>”);
例如:
s.click(“test.png”);
#3:右鍵單擊一個元素
此方法用來右鍵點擊屏幕上的特定圖像。
語法:
s.rightClick(“<>”);
例如:
s.rightClick(“test.png”);
#4:查找元素
此方法用於查找屏幕上的特定元素存在。
語法:
s.find(“<>”);
例如:
s.find(“test.png”);
#5:雙擊一個元素
此方法用於觸發屏幕上特定圖像的雙擊事件
語法:
s.doubleClick(“<>”);
例如:
s.doubleClick(“test.png”);
#6:檢查元素是否在屏幕上顯示
這個方法是用來檢查指定的元素是否存在於屏幕上。
語法:
s.exists(“<>”);
例如:
s.exists(“test.png”);
#7:在文本框輸入一個字符串
這種方法是用來在文本框輸入指定的文本。
語法:
s.type(“<>”,”String to be typed”);
例如:
s.type(“test.png”,“HI!!”);
#8:旋轉指定的圖像
這個方法是用來對圖形元素進行旋轉操作。
語法:
s.wheel(“<>”,<>,<>);
例如:
s.wheel(“test.png”,25,0);
#9:拖放圖片
這個方法是用來將圖片從源位置拖放到目標位置的。
語法:
s.dragDrop(“<>”,”<>”);
例如:
s.dragDrop(“test.png”,“test1.png”);
#10:特定圖像的滾動鼠標懸停
這個方法是用來對特定圖像進行滾動懸停事件。
語法:
s.hover(“<>”);
例如:
s.hover(“test.png”);
#11:粘貼複製的字符串
這個方法用來在指定的文本框中粘貼文本。
語法:
s.paste(“<>”,”test”);
例如:
s.paste(“test.png”,“測試”);
Sikuli例1:YouTube影片——暫停和播放視頻
步驟#1:
打開YouTube視頻鏈接,並使用屏幕捕獲工具捕獲播放和暫停元素的圖像。-------------------
暫停按鈕(注意:文件名pause.png)
播放按鈕(注意:文件名play.png)
複製這些圖片到你的項目中。
步驟#2:
在Sikuli的Java項目中創建package並創建一個名爲“YouTube”的類。
步驟#3:
在類中輸入下面的代碼。package com.test; import org.sikuli.script.FindFailed; import org.sikuli.script.Screen; public class Youtube { public static void main(String[] args) throws FindFailed, InterruptedException { // TODO Auto-generated method stub Screen s=new Screen(); s.find("pause.png"); //identify pause button s.click("pause.png"); //click pause button System.out.println("pause button clicked"); s.find("play.png"); //identify play button s.click("play.png"); //click play button } }
步驟#4:
右鍵單擊類選擇Run As——>Java應用程序。
Sikuli例2:打開記事本,輸入一些文字
步驟#1:
捕獲屏幕上的桌面記事本圖標。
notepad_icon.png
notepad.png
步驟#2:
複製這些圖片到你的項目中。
步驟#3:
在項目中創建一個名爲“NotepadExample”的類,然後輸入下面的代碼。package com.test; import org.sikuli.script.FindFailed; import org.sikuli.script.Screen; public class NotepadExample { public static void main(String[] args) throws FindFailed { // TODO Auto-generated method stub Screen s=new Screen(); s.click("notepad_icon.png"); s.find("notepad.png"); s.type("notepad.png","This is Nice Sikuli Tutorial!!!!"); } }
步驟#4:
執行代碼之前打開需要進行測試的屏。
右鍵單擊選擇Run As——>Java應用程序來執行此文件。
Sikuli例3:拖放
步驟#1:
通過屏幕截圖截取屏幕上所需的項目,並將其放入sikuli項目中。
[注:下載圖標“source.png”和花的圖片“destination.png”]
步驟#2:
把這些圖片放入你的項目中。
步驟#3:
以“DragAndDrop”爲名創建一個類,並寫入以下代碼。package com.test; import org.sikuli.script.FindFailed; import org.sikuli.script.Screen; public class DragAndDrop { public static void main(String[] args) throws FindFailed, InterruptedException { // TODO Auto-generated method stub Screen s=new Screen(); s.find("source.png"); System.out.println("Source image found"); s.find("target.png"); System.out.println("target image found"); s.dragDrop("source.png", "target.png"); } }
步驟#4:
右鍵單擊選擇Run As——>Java應用程序來執行此腳本。
執行該腳本後,下載的圖標將被拖放到圖像上,顯示爲目標。
執行前:
執行後:
這個工具的缺點
- 我們不能保證圖像匹配的將是永遠準確的。有時,如果屏幕上有兩個或更多類似的圖像,Sikuli將可能選擇錯誤的圖像。
- 如果圖像在像素尺寸方面有所變化,也可能導致“查找失敗”的異常。
- 過多的截圖帶來的開銷。
- 如截圖中的任何一個缺失,會影響程序的執行。
更多的資源:
結論
Sikuli在自動化Flash對象方面非常有用。它可以被用來自動化基於窗口的應用程序。這是個基於可視化屏幕上顯示的元素,並對其進行處理的極好的工具。
關於作者:這是一個由Anitha Eswari所著的博文。目前她正從事高級測試工程師,具有關於手動和自動測試以及各種測試管理工具的豐富的知識。