E2E 測試工具 SilkuliX -- 常用指令

張庭瑋 Gary Chang 2023/01/11 18:28:30
2300

我們從上一篇 <快速上手>沒有介紹到的 Regoin、Location、Offset開始吧!

 

Region:

字面上的意思為區域,限定一個範圍讓Sikuli進行圖像辨識
如下圖紅框範圍



拿"在雜亂桌面中打開資源回收桶"作為範例

 

步驟詳述

1. 定義用Region選定的範圍為 r
2. 這邊為方便說明,使用指令highlight(秒數)  讓選定的區域會出現(5秒)的紅框
3.在這個區域裡面指定的圖示點兩下

 

 

 

Location:

字面上的意思為位置,意思是指定一個由(x,y) 組成的座標

(x,y)的原點(0,0)為螢幕的左上
至於為什麼,請參考這篇文章



拿"打開資源回收桶"作為範例

步驟詳述

1. 還記得上一篇提到的 hover 【懸浮】指令嗎?
命令鼠標懸浮至螢幕的(412,230)位置

2. 滑鼠按兩下圖示

 

 



介紹最後一個offset功能之前
要先介紹sikuliX的另外一項功能"圖像吻合度"

SikuliX是建立在圖像辨識的基礎上運行
所以執行指令之前會需要先進行辨識

 

那要怎麼知道自己選擇的圖片有沒有吻合sikuliX的標準呢?

馬上透過下面的教學了解吧!

Matching preview

1.對要下達指令的圖片,滑鼠左鍵點一下

2.會開啟一個新視窗Pattern Setting,選擇分頁 Matching preview

3.進到介面後,上方為測試的初始畫面,下方拉桿為準確度,越往右(接近0.99)表示辨識的越準確

粉紅框標起來就是silulix辨識到的圖示

當然,可以把辨識準確度都拉到最右,但是這樣會無謂地消耗電腦效能,故我們取足夠辨識的程度就好

 

那讀者可能會問:為節省效能,把辨識度拉到最低就好啦

辨識度太低的話,sikulix眼裡的chrome會長這樣:

顏色有深有淺,若就這樣下去執行,sikulix就會按照顏色深淺的順序操作

簡單來說,就是不精準

以上是圖像吻合度的簡單介紹

詳細可以參考這邊

 

 


Offset:

除了使用圖像吻合度來操作之外,還可以利用圖像裡的相對位置,讓測試可以更加精準

利用loaction的原理,讓選定的圖像成為座標原點(0,0)

命令滑鼠到offset(x,y)進行指令

 

舉個例子:

我們想要在一個搜尋框裡輸入google

find("search-bar.jpg").offset(x,y)
click()
type("google")

1. 使用find 【尋找指定圖片】 搭配offset選定的座標
2. 鼠標移動到(x,y) 後點擊
3. 輸入指令,內容為my name

 

 

 

最後這邊提供些常用到的指令:

click:單撃
doubleClick:雙擊
rightClick:右鍵單擊
hover:懸浮
type:輸入文字
wait:等待指定圖樣出現
higlight:標示選定的區域

對沒有接觸過程式語言的使用者來說,這些指令已經足以應付大多數的使用情境

若使用者對程式語言有一點概念的話,也可以教他們一些簡單的應用

 

以勾選checkbox為例:

這個來幫助我們這次的測試



用sikulix幫我們勾選所有的checkbox



結果如下:

這邊用了一個新的指令 findAll【找到全部符合條件的圖】



 

進階使用

因為Sikulix 是使用Jython語言 (什麼是Jython)

 

所以能夠與Python 結合,編寫出更有效率的測試腳本

又,Sikulix主要是由Java編成,所以也能導入JAVA後直接使用

import org.sikuli.script.*;

public class TestSikuli {

        public static void main(String[] args) {
                Screen s = new Screen();
                try{
                        s.click("imgs/spotlight.png");
                        s.wait("imgs/spotlight-input.png");
                        s.click();
                        s.write("hello world#ENTER.");
                }
                catch(FindFailed e){
                        e.printStackTrace();
                }
        }

}

這邊用了一個新的指令 wait 【等待指定圖片出現】

 

 

 

聰明的各位腦中是不是出現了一些畫面:

例行性的操作流程

固定步驟的應用程式或網頁工具

指令重複性高的遊戲 .....

甚至也可以做很簡單的桌面監控程式

 

是不是開始想要動手試試看了呢?

 


衍伸閱讀:

SikuliX 如何辨識圖片的? 

 

參考資料:

https://qiita.com/mima_ita/items/8f653042ac9140e5023f

https://launchpad.net/sikuli

https://www.jython.org/

http://sikulix.com/

https://github.com/RaiMan/SikuliX1

張庭瑋 Gary Chang