獲取android appActivity的四種常用方法

=========不積跬步無以至千里==========

在進行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,當然還有其他的方法也可以實現,具體的選擇要根據個人使用習慣來確定使用哪種方法了。

===========每日有輸入,每日有輸出==============

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章