Shell,可以說是由裝置外部操控裝置的最後也是最強的一種工具,但這並不意味著 monkeyrunner 提供的功能僅僅是 shell 的包裝,甚或雞肋,他們的關係更像是互補。monkeyrunner 不能做到的事由 shell 來完成;而 shell 不能達成的工作,則由 monkeyrunner 來補足,縱使兩者都具備的功能,其表現也不盡相同。因此何時使用 shell 或 monkeyrunner,端視裝置的能力與看官希望達成的效果而定。
要使用 shell 可以有兩種途徑:MonkeyDevice.shell (string cmd) 和 adb shell,各有其適當的使用時機。MonkeyDevice.shell() 的參數如下:
cmd | 要在 adb shell 執行的指令。 |
---|---|
timeout |
命令沒有回應時的最多等待時間,單位為毫秒,預設為 5000。咱們通常不會去使用,官方文件也沒記載。
|
比如想知道 Nexus 5 (Android 8.1.0) 的當前畫面執行的 activity 是什麼,咱們可以如下使用 monkeyrunner:
# 匯入所需模組
from com.android.monkeyrunner import MonkeyDevice, MonkeyImage, MonkeyRunner
# 連接 Android 裝置
device = MonkeyRunner.waitForConnection()
# 取得目前畫面的 activity
result = device.shell("dumpsys activity | grep ' fore '")
# 在 console 內印出結果
print(result.encode('utf-8'))
或直接使用 adb shell:
C:\Users\Tester> adb shell "dumpsys activity | grep ' fore ' " |
Proc # 0: fore T/A/TOP trm: 0 23894:com.android.settings/1000 (top-activity) |
注意:dumpsys activity | grep ' fore ' 僅僅是剛好可以在 Nexus 5 內使用,不代表所有 android 裝置和版本都一定可藉由 ' fore ' 這關鍵詞來取得當前 activity,使用前請詳閱公開說明書,如有雷同,純屬巧合。
有一點很重要!本喵通常不會以 MonkeyDevice.shell() 來執行 shell 指令,而是利用 Python 的 os.system() 或 subprocess.Popen() 來呼叫 shell。至~於~原~因~嘛~~欲知詳情,且聽下回分解~~喵~
沒有留言:
張貼留言