获取android appActivity的四种常用方法

  • Post author:
  • Post category:其他


=========不积跬步无以至千里==========

在进行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,当然还有其他的方法也可以实现,具体的选择要根据个人使用习惯来确定使用哪种方法了。

===========每日有输入,每日有输出==============



版权声明:本文为atnanyang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。