相比於 MonkeyDevice 提供的 press、touch 和 drag 三種方法,本喵更常使用 shell 提供的 input 來執行對應的動作。其實若單以行為的可控制性來說,MonkeyDevice 是勝過 shell input 的,比如 shell input tap 只能執行「點一下螢幕」這樣的動作,而 MonkeyDevice.touch() 還可以模擬「長壓螢幕」的行為。但之所以選擇 shell input,是因為 monkeyrunner 太常丟出 exception 了,雖然這可以藉由良好的封裝來重複嘗試執行,但設計上畢竟較繁複,執行測試時也會花費更多時間在不必要的 try...exception 上;另一個理由則是本喵被分配的工作剛好 shell input 便足夠勝任了,所以除非有必要,否則本喵是傾向使用簡單的方式來達成目的。
本喵常用的語法如下:
語法 | 說明 |
---|---|
input |
列出裝置支援的動作。其實本喵遇過雖列出支援 swipe,但實際上沒作用的裝置,最後還是只能使用 MonkeyDevice.drag() 的情況,所以在使用希望的功能時,儘量在目標平台上多試驗其可行性,畢竟 input 所支援的行為和平台版本相關。
|
input keyevent [--longpress] <key code number or name> |
與 MonkeyDevice.press(<key name>, MonkeyDevice.DOWN_AND_UP) 的行為類似,但支援以 key code number 來指定按鍵類型。
另外 --longpress 這個參數實際上沒作用,本喵會在 16-input三兄弟keyevent 中解釋其原因。 |
input tap <x> <y> |
與 MonkeyDevice.touch(<x>, <y>, MonkeyDevice.DOWN_AND_UP) 的行為類似,本喵會在 17-input三兄弟tap 中示範其用法。
|
input swipe <x1> <y1> <x2> <y2> [duration(ms)] |
與 MonkeyDevice.drag( (<x1>, <y1>), (<x2>, <y2>) ) 的行為類似,本喵會在 18-input三兄弟swipe 中說明。
|
有一點需特別注意:
本喵通常不會以 MonkeyDevice.shell() 來執行 shell 指令,而是利用 Python 的 os.system() 或 subprocess.Popen() 來呼叫 shell,理由在 14-繞遠路雖愚蠢但有用 (screencap) 也有提及,那就是 MonkeyDevice.shell() 可能產生莫名的 exception,這種奇妙的 exception 在 16-input三兄弟keyevent 中便有一例。
大概各位看官會對本喵ㄧ直沒正面回答這個奇妙的 exception 是怎回事而不滿吧!請稍安勿躁!本喵會在下回解釋這個神奇的 exception 是怎回事,以及解法的~~喵~
沒有留言:
張貼留言