本喵最開始要介紹的當然就是所有測試前都必須做的——裝置連線:MonkeyRunner.waitForConnection (float timeout, string deviceId)
MonkeyRunner.waitForConnection() 的作用就是讓手機或模擬器與 monkeyrunner 後端連線,這樣才能藉由腳本傳輸命令控制 Android 裝置。
參數:
timeout | 單位是秒,表示允許等待的最長時間以讓裝置和 monkeyrunner 連線。若無填寫,表示會一直等待直到連線成功為止;若無可連線裝置,monkeyrunner 便會等到海枯石爛,至死不渝。 |
---|---|
deviceId | 一個能代表裝置的 serial number 的正規表示式。 |
第 1 個參數 timeout 相信看官們不會有什麼理解上的問題,有疑惑的可能是第 2 個參數 deviceId。首先咱們要知道什麼是裝置的 serial number,請打開萬能的命令提示字元,並在裡面輸入 adb devices,結果可能如下:
C:\Users\username>adb devices |
List of devices attached |
0123456789A device |
0123456789B device |
0123456789C offline |
上面的結果顯示現在和電腦接在一起的 Android 實體裝置有三個,其中可以連線到 adb server 的有兩個:0123456789A 和 0123456789B,這也暗示著這兩個裝置可以用 MonkeyRunner.waitForConnection() 與 monkeyrunner 的後端連接。而最後一個裝置 0123456789C 雖然也接在電腦上,但無法和 adb server 溝通,亦無法以 MonkeyRunner.waitForConnection() 連接。通常遇到這種 offline 狀態的時候就是重新插拔 USB 線,或是將 Android 裝置與電腦重新開機,或者在命令提示字元下依序執行 adb kill-server、adb start-server 和 adb remount。而像 0123456789A、0123456789B 和 0123456789C 這種字串就是 serial number,必須注意的是,serial number 的長度並沒有固定,也就是長度可能是 10,也可能是 16 不等,端看廠家怎麼編號。
知道 serial number 怎麼取得後,咱們就能說明 MonkeyRunner.waitForConnection() 怎麼使用了:
裝置數量 | 用法 |
---|---|
1 | MonkeyRunner.waitForConnection() 說明: 一直等到裝置與 monkeyrunner 連線為止 |
1 | MonkeyRunner.waitForConnection(<timeout>) Ex. 10 秒內若連不上任何裝置就返回: MonkeyRunner.waitForConnection(10) |
2 以上 | MonkeyRunner.waitForConnection(deviceId=<deviceId>) Ex. 一直等到與 0123456789B 連線上為止: MonkeyRunner.waitForConnection(deviceId='0123456789B') |
2 以上 | MonkeyRunner.waitForConnection(<timeout>, <deviceId>) Ex. 30 秒內若連不上 0123456789C 就返回: MonkeyRunner.waitForConnection(30, '0123456789C') |
2 以上 | MonkeyRunner.waitForConnection(<timeout>) Ex. 15 秒內若連不上任何裝置就返回: MonkeyRunner.waitForConnection(15) 請注意: 上例等待連線的裝置並不一定是 adb devices 傳回的第一個裝置,端看 monkeyrunner 內部怎麼查找裝置 |
2 以上 | MonkeyRunner.waitForConnection() 說明: 一直等到裝置與 monkeyrunner 連線為止 請注意: 上例等待連線的裝置並不一定是 adb devices 傳回的第一個裝置,端看 monkeyrunner 內部怎麼查找裝置 |
由上表可知,當電腦接有兩個以上的 Android 裝置時,最好指定可表示唯一的 deviceId 給 MonkeyRunner.waitForConnection(),否則將無法保證其連上的是預期的裝置。為什麼說指定可表示唯一的 deviceId 呢?看官們是否還記得參數表格內說 deviceId 是一個能代表裝置的 serial number 的正規表示式?比如 0123456789A、0123456789B 和 0123456789C 這三個 serial numbers 在正規表示式裡都可表示為 0123456789\w,若現在連上電腦的這三個裝置都可與 adb server 連線,在呼叫 MonkeyRunner.waitForConnection(deviceId=r'0123456789\w') 後,monkeyrunner 到底會連上誰呢?除了非常清楚 monkeyrunner 和 Android 系統的大大們外,大概很難回答這個問題吧。所以各位看官在使用 MonkeyRunner.waitForConnection() 時,請為 deviceId 指定一個唯一的表達式,當然若電腦只接一個 Android 裝置的話,就不用指定 deviceId 了。
沒有留言:
張貼留言