2010年8月13日

SIKULI 初體驗 -2:進階技巧 & 其他感想

上週日分享了一篇:SIKULI 初體驗 - 利用 SIKULI 每日自動將 50 個 AWStats Report 另存為 mht 檔,這週又花了些時間持續改進。

雖然經過幾次測試,感覺已經沒甚麼問題了,但最後想到這樣的東西要交接其實蠻困難的,因此最後捨棄了這個完整版,另外花了 10 分鐘改出一個精簡版,只有自動去抓 4 個很複雜的綜合報表下來另存,並且用 FileZilla 上傳到 Server 而已。

經過幾天的實作,又更深入的瞭解到 SIKULI 的好處 & 應用上的限制,以下是簡單的紀錄。

進階技巧

SIKULI command line tool

SIKULI 是可以接受 command line 參數的,我遇到的狀況是 SIKULI 執行有時候會失敗,而我要抓的 mht 檔可以分為幾個群組,因此後來我把每個群組包成一個 function,新增一些 command line 參數來對應這些 function,如此就可透過 command line 參數來控制要重跑哪一個 function 了。

SIKULI command line tool 的相關說明可從官網點選 download 之後,在左下的 Others 中點選 Command Line Tool 連結,如下圖:


傳遞 command line 參數給 SIKULI 的範例 (在 cmd 視窗中執行以下指令):

C:\Program Files\Sikuli\Sikuli-IDE.bat -r "\path\to\your\sikuli project folder\xxx.sikuli" --args yourArgs

SIKULI 從 command line 接受到參數以後,會存在 sys.argv 裡頭 (其實底層就是 Python 啦),應用方式請參考:Handling command line arguments (sys.argv)。

這次遇到的問題

SIKULI Runtime Exception

有一次在實際執行 SIKULI script 的時候,經過了 30 個迴圈,忽然冒出以下這個 C++ Runtime Error,按下確定以後整個 SIKULI process 就消失了 (IDE 也掛了),完全不知道為甚麼 ... 但之後執行了很多次都不會遇到這個問題,可見現階段 SIKULI 還是不太穩定。



SIKULI Project Rename 後不會自動刪除舊的 .py 和 .htm 檔

在 SIKULI IDE 中可以選擇「檔案」->「另存為」將 project 取個新名字後另存,但是舊的 .py 和 .htm 檔不會自動刪除,必須手動刪除,有點小小的麻煩。



其他感想:
  • SIKULI IDE 不支援 ctrl-z,無法很快速的復原上一個操作。
  • 在 Windows 上,明明每次都在全螢幕模式下關閉程式,但 IE 和 Excel 在開關多次以後,有時候會以「非全螢幕」的方式啟動,導致我要另外叫 SIKULI 去視窗上按右鍵後輸入「x」來確保視窗是全螢幕執行,很麻煩。
  • 如果在設定「排定的工作」時選擇將電腦喚醒後執行 SIKULI script,當電腦進入待命/休眠狀態,再被喚醒執行 SIKULI script 時,往往會發生錯誤 (最常見的是無法辨認某張圖片),即使手動重新執行也可能會持續出錯,再重開機以後就恢復正常,不確定是啥問題。
  • SIKULI 執行時有時候會造成短暫的 delay (e.g., 0.x 秒),如此可能會造成某張圖片無法辨識,因為該跳出的對話視窗還來不及跳出來。我的解法是多利用 waitwaitVanish,讓 SIKULI 等到預期的對話視窗出現以後再執行動作。
  • 承上,wait 和 waitVanish 的預設 timeout 時間是 3 秒,但以「IE另存新檔」這個對話視窗為例,執行時間要視該網頁的複雜程度而定,有可能要超過 3 秒才能存檔完畢,因此適當的調整 timeout 秒數是很重要的,否則後面的程式一執行可能會讓系統整個亂掉。
  • 程式可攜性 (Portability):由於 SIKULI 的核心 & 最有魅力的特點是內建電腦視覺引擎,因此「抓圖寫程式」是一大賣點。但是仔細想想就會發現,如果用越多抓圖,就越會被綁在目前的操作環境中,如果把程式移到另一台電腦上,或者把 XP 的佈景主題改掉 (e.g., 藍色 -> 銀色),那 SIKULI 執行失敗 (無法辨識圖片) 的機率就會越高。

    就這點來看,SIKULI 比較適合用在自己的工作環境的自動化,除非企業有用 AD 或者其他可以讓每個使用者桌面都維持一致的管理機制,不然 SIKULI script 要大量佈署是有困難的。(當然也可以盡量用 hotkey (e.g., ctrl-c, ctrl-v 來取代點擊 GUI 環境中的按鈕,但是這樣就不炫了...)
經過這次的實作對 SIKULI 有了初步的認識,雖然目前暫時還沒想到其他的應用,但以後自己手上又多了一個好用的工具啦!

參考資料:
  1. SIKULI command line tool 
  2. How to force a running Sikuli script to quit? 
  3. An Introduction to Python: Control Structures
  4. The basic python datatypes (dictionary)
  5. Handling command line arguments (sys.argv)
  6. Exception FindFailed

2 則留言:

Unknown 提到...

你好,想請問
作為Unit Test來使用這套工具
可以產生Report嗎?

Unknown 提到...

Hi, 我想 SIKULI 應該是沒有內建 Report 這種比較進階的東西,這部份可能要自己想辦法囉 ~

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D