=========不積跬步無以至千里==========
在進行Android的app UI自動化時,從Appium啓動制定package是通過獲取指定的android activity實現的,那麼如何獲取目標Activity就成爲了啓動一個Appium Session的第一步,先總結方法如下:
方法一 從Appium指定安裝包
這個方法爲最簡單粗暴,即下載好了待測package後,在appium的capability中添加待測包的位置,點擊start session後,直接從appium-desktop的log window中能看到所有的操作信息,可直接定位到啓動對應的android activity。
例如在以下appium capability中指定了app的path,那麼appium會自動給Android device安裝指定的package並且把相應的操作都通過控制檯輸出
{
"platformName": "Android",
"platformVersion": "6.0",
"deviceName": "Android Emulator",
"automationName": "Appium",
"app": "/Users/cosetteqi/Downloads/llsstaging60.apk",
"noReset": true,
"autoGrantPermissions": true,
"udid": "192.168.56.101:5555"
}
Appium日誌定位到的Activity
那麼之後通過Appium直接啓動package而不需重新安裝時,直接指定appActivity即可,capability可設置如下:
{
"platformName": "Android",
"platformVersion": "6.0",
"deviceName": "1111111",
"automationName": "Appium",
"appPackage": "com.target.engzo",
"appActivity": ".app.activity.LauncherActivity",
"noReset": true,
"autoGrantPermissions": true
}
方法二 使用dumpsys命令
應用此方法首先要明確待測package的package name,可通過如下命令獲取:
#查看當前device中所有apk對應的package name和path
adb shell pm list package -f
#僅查看第三方的apk package
adb shell pm list package -3 -f
明確了待測包的package name後,即可使用dumpsys命令獲取要抓取的appActivity
注意:cmd terminal的查找命令在linux和mac操作系統中對應關鍵字時grep,在Windows操作系統中對應關鍵字是 findstr
比如我要獲取WeChat的appActivity,第一步我需要打開WeChat,打開後在terminal中輸入以下信息:
adb shell dumpsys window w | grep mCurrent
對應定位到的appActivity就會自動被定位到並輸出如下:
mCurrentFocus=Window{bfcb871 u0 com.tencent.mm/com.tencent.mm.ui.LauncherUI}
方法三 使用logcat日誌篩選
在terminal中輸入以下cmd,然後對待測package進行具體的操作,此命令是能夠實時獲取appActivity的
adb logcat ActivityManager:I *:s
Cosette:~ cosetteqi$ adb logcat ActivityManager:I *:s
--------- beginning of system
--------- beginning of main
01-23 14:18:07.737 1075 1243 I ActivityManager: [Background Service Priority Adjustment] Set callerFg as false for service.getFlags():292
01-23 14:19:17.163 1075 2071 I ActivityManager: moveTaskToBack: TaskRecord{e0cd18d #22922 A=com.tencent.mm U=0 sz=1}
01-23 14:19:18.623 1075 1389 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[282,960][540,1248]} from uid 10014 from pid 2100 on display 0 from pid 2100 cloneId 0
01-23 14:19:25.214 1075 1090 I ActivityManager: START u0 {cmp=com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI (has extras)} from uid 11126 from pid 13530 on display 0 from pid 13530 cloneId 0
01-23 14:19:26.134 1075 1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI: +867ms
01-23 14:19:34.777 1075 1931 I ActivityManager: START u0 {cmp=com.tencent.mm/.plugin.scanner.ui.BaseScanUI (has extras)} from uid 11126 from pid 13530 on display 0 from pid 13530 cloneId 0
01-23 14:19:35.925 1075 1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.scanner.ui.BaseScanUI: +1s93ms
方法四 使用dumpsys activity直接進行查找
首先啓動待測的package,輸入以下cmd
adb shell dumpsys activity | grep mFocusedActivity
此命令能夠直接定位到最後一個被執行的Activity,然後直接將此Activity的信息返回到terminal
mFocusedActivity: ActivityRecord{15e435f u0 com.tencent.mm/.ui.LauncherUI t22922}
以上四種方法都可用於查找定位appActivity,當然還有其他的方法也可以實現,具體的選擇要根據個人使用習慣來確定使用哪種方法了。
===========每日有輸入,每日有輸出==============