最近因緣際會下開始玩一些自動化測試的小工具,發現即使不是用在正規的測試時也相當實用,畢竟我們這行能讓電腦自動幫我們省事就是一種樂趣嘛。正巧這禮拜比較忙,無法準時推出訂便當系列的續集,因此決定直接紀錄一下試玩 Sikulix 的過程,以後有需要自動化的時候也方便回來參考。

Sikulix 是一款針對圖形介面編寫腳本達到自動操作的軟體,操作上相當方便。主要是將目標的圖示等畫面擷取下來,再編寫程式對目標進行操作。它編寫腳本時使用的語言是 Jython —— 用 Java 實現的 Python,關於 Jython 的基本操作可以參見 Wiki 教程:Jyhton,對於「實現 Python?」這句話感到疑惑的朋友可以參見 知乎:各種 Python 實現的簡單介绍與比較

此外,本篇對於 Sikulix 的參考主要來自於【測試】圖形化的自動測試 Sikuli / SikuliX 的相關技巧以及 Sikulix 圖形辨識自動化測試開發工具兩篇,特此感謝。

下載與安裝

首先必須先到 Sikulix.com 下載;進去後直接點選 Latest stable version 就會進到下載頁面,接著直接下載 IDE 來使用。

如果沒有準備 Jython 環境,就需要再下載 Jython 獨立包。並放置在和 Sikulix 的 IDE 同個資料夾中。如果需要別的載入方式,可以參閱 How to make Jython ready in the IDE

準備完畢之後,直接打開 IDE 應該就能看到操作介面囉!

實作一個小測試

開啟 IDE 之後,可以看見左邊的程式區,右邊的輸出訊息,以及上面一排操作選單。我們先前提過 Sikulix 是一款以圖形操作的自動化工具,因此我們最常用到的會是上方的 螢幕截圖 和 插入圖片 這兩個能把圖放進去的功能。

為了做基本的測試,這邊我打開 Windows 內建的小算盤,並且使用上方工具列的螢幕截圖功能。按下左上角的螢幕截圖後就可以圈選目標,這邊我嘗試將計算機的按鈕框選起來。一框選起來之後它就會幫我們把圖放到左邊的程式區準備讓我們使用。(註:如果不想看見圖片的影像,而想要直接看圖的檔名,如圖片是使用插入圖片要以顯示檔案名稱為主的時候,可以從上面工具列的「檢視」中做切換。)

接著讓我們先存檔一次(養成好習慣!不過即使尚未存檔,在執行腳本前也會要求存檔),會跳出存檔畫面,這邊示範就先隨便取個名字試試。

接著該路徑就可以看見 .sikuli 資料夾。

可以看見裡面包含我們剛剛的圖片以及一個 py 檔,我們實際在 IDE 左側撰寫的腳本就是這個 py 檔。

接著測試最簡單的 click() 方法,我們嘗試讓他按下按鈕試試。

使用 click() 將目標按鈕包起來之後按下執行,些微的停頓後就可以看見滑鼠直接滑向目標並按下去囉!整體的流程相當簡單,只需要目標的截圖和採用需要的方法就可以完成一個簡單的腳本。

一些比較常用到的指令如下:

  • click:點擊
  • doubleClick:點兩下
  • rightClick:點右鍵
  • dragDrop:拖曳
  • hover:懸浮
  • wait:等到指定圖樣出現
  • waitVanish:等到指定圖樣消失
  • exist:指定圖樣是否存在
  • type:輸入文字
  • paste:貼上文字

此外,也能使用上方的工具列來圈選範圍,例如 Show 就能顯示指令將抓取的位置,藉此校正腳本內容。大多把滑鼠移上去會有說明,這邊補充一下,感謝這篇的示範:

  • Region:限制尋找範圍的區域
  • Location:指定座標
  • Offset:偏移量,平移找東西的時候好用,可參見這篇的「Offset」
  • Show:顯示該指令在螢幕上會找到的區域,可參見這篇的「Show & Show in 作用」
  • ShowIn:有時候 Show 會抓到多個符合條件的區域而選了第一個,但那又不是我們要的目標時,用 ShowIn 就能指定該在螢幕上尋找目標的區域

這些指令的組合已經足夠完成大部分的日常工作了,但其實 Sikulix 的潛力仍然還有許多,參考資料將附於本段末。

我之所以體會到其強大處,是在前陣子在幫同學安裝 Python 環境時,就遇到需要說明「如何加入環境變數」的場合。像這種時候,我們就可以做一個自動打開環境變數設定頁面的腳本。(備註:系統操作需要用系統管理員身分執行 Sikulix 才能執行)

之後就可以丟給強者我同學讓他跑一次省得說明鬼撞牆。平常都丟影片,偶偶丟腳本也挺有工程師的感覺,哈。

關於可以使用的方法和更深的進階操作,請參閱 sikuli入门到进阶半工室:Sikuli 使用 - 重點教學 以及 SikuliX 官方文件

關於一些進一步會遇到的問題,例如怎麼傳值進來腳本,請參閱【測試】圖形化的自動測試 Sikuli / SikuliX 的相關技巧

心得

之前在看自動化操作的時候,關於網頁這種能看見原始碼找到操作點的可以直接使用 Selenium,而像 APP 也可以用工具抓到 Layout 去執行 Appium。然而像操作 Windows 或是一些應用程式等等就無法仰賴前兩者,這時候就是 Sikulix 出場的時候了。由於其是使用辨識圖像的方式進行的,因此只要有圖形化介面的東西都難不倒他,可以說相當實用,尤其是像我偶而會重灌的,就可以把每次會需要經歷的系統經歷錄成腳本,縮短每次環境佈署的時間,像是 2010 年 Sikuli 的示範影片 就是以設定 IP 為範例去操作呢。實際想一想,能用到的地方真的很多呢,例如

「你的遊戲怎麼自己在動?」

「這、這是為了學術用途!」

順便一提,原本的操作範例我是打算跑一次台鐵訂票等整個流程的操作介面,但是驗證碼的時候就卡關了,既然有了上次實作 Selenium 時看到 驗證碼的相關文章,也許這種時候就是機器學習出場的時機吧!這樣想著,希望之後能有機會可以嘗試看看,屆時再將記錄放上來。

參考資料