2018年11月5日 星期一

16-input三兄弟keyevent

語法 input keyevent [--longpress] <key code number or name>
說明 與 MonkeyDevice.press(<key name>, MonkeyDevice.DOWN_AND_UP) 的行為類似。
Key name,可查閱 KeyEvent 裡以 KEYCODE_ 為開頭的名稱。
Key code number,可查閱 KeyEvent 裡以 KEYCODE_ 為開頭的名稱的 constant value。
--longpress 此參數目前無法達成長壓按鍵的效果。

咱們直接看例子:

2018年11月4日 星期日

15-輕量級的輸入模擬 (input)

相比於 MonkeyDevice 提供的 press、touch 和 drag 三種方法,本喵更常使用 shell 提供的 input 來執行對應的動作。其實若單以行為的可控制性來說,MonkeyDevice 是勝過 shell input 的,比如 shell input tap 只能執行「點一下螢幕」這樣的動作,而 MonkeyDevice.touch() 還可以模擬「長壓螢幕」的行為。但之所以選擇 shell input,是因為 monkeyrunner 太常丟出 exception 了,雖然這可以藉由良好的封裝來重複嘗試執行,但設計上畢竟較繁複,執行測試時也會花費更多時間在不必要的 try...exception 上;另一個理由則是本喵被分配的工作剛好 shell input 便足夠勝任了,所以除非有必要,否則本喵是傾向使用簡單的方式來達成目的。

2018年10月28日 星期日

14-繞遠路雖愚蠢但有用 (screencap)

screencap 是 Android shell 提供來擷取目前螢幕畫面的工具程式,本喵只使用過以下語法:
語法 說明
screencap -p [FILENAME] [FILENAME],截圖儲存在 Android 裝置上的檔案路徑,格式為 png。

什麼時候會需要以 screencap 來取代 MonkeyDevice.takeSnapshot() 呢?本喵遇過的情境如下:

2018年10月27日 星期六

13-最終兵器MonkeyDevice.shell

Shell,可以說是由裝置外部操控裝置的最後也是最強的一種工具,但這並不意味著 monkeyrunner 提供的功能僅僅是 shell 的包裝,甚或雞肋,他們的關係更像是互補。monkeyrunner 不能做到的事由 shell 來完成;而 shell 不能達成的工作,則由 monkeyrunner 來補足,縱使兩者都具備的功能,其表現也不盡相同。因此何時使用 shell 或 monkeyrunner,端視裝置的能力與看官希望達成的效果而定。

2018年10月22日 星期一

12-心中那一瞬的美麗 (MonkeyImage.writeToFile)

咱們已經知道如何載入圖片檔了,那依照想當然耳的對稱性會認為應該存在一個儲存圖片的方法才是,MonkeyImage.writeToFile (string path, string format) 就是用來將 MonkeyImage 表示的畫面儲存成圖像檔的方法。

2018年10月19日 星期五

11-九又四分之三的回憶 (MonkeyRunner.loadImageFromFile)

咱們已經知道如何擷取螢幕的畫面,也了解怎麼切割與比較它,但看官們一定滿肚子疑惑:「我才不在乎螢幕畫面有沒變化呢!我想知道的是目前畫面是不是我想要的阿!」

是的!只靠先前章節介紹的方法根本無法得知目前 app 運行的進展,咱們需要的是一個可以載入預期畫面的方法,好拿它與目前畫面做比較。但非常令人意外的是,Google monkeyrunner 的官方介紹中卻看不到任何與載入圖片相關的說明?!

2018年10月18日 星期四

10-失去你擁有世界又如何 (MonkeyImage.getSubImage)

通常檢查裝置是否在預期的情境時並不會去比較整個螢幕畫面,因為咱們只在意畫面上最關鍵的部分——可以代表預期影格的最有力的特徵,這主要是為避免誤判,另一方面也是為了加速畫面的比較。雖然 MonkeyImage.sameAs() 無法指定比較的範圍,但咱們可以從 MonkeyImage 物件提取出適當的畫面後再以 MonkeyImage.sameAs() 進行比較,這便是 MonkeyImage.getSubImage (tuple rect) 的作用。