Sikuli GUI自動化工具

與往常一樣,我們試圖爲我們的讀者引進新的東西來學。今天就讓我們來探討一個有趣的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例子在這裏
  • 更多視頻教程在這裏
  • 詳細Sikuli文檔在這裏

結論

Sikuli在自動化Flash對象方面非常有用。它可以被用來自動化基於窗口的應用程序。這是個基於可視化屏幕上顯示的元素,並對其進行處理的極好的工具。

關於作者:這是一個由Anitha Eswari所著的博文。目前她正從事高級測試工程師,具有關於手動和自動測試以及各種測試管理工具的豐富的知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章