当前位置:   article > 正文

获取android appActivity的四种常用方法_appactivity如何获取

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并且把相应的操作都通过控制台输出

  1. {
  2. "platformName": "Android",
  3. "platformVersion": "6.0",
  4. "deviceName": "Android Emulator",
  5. "automationName": "Appium",
  6. "app": "/Users/cosetteqi/Downloads/llsstaging60.apk",
  7. "noReset": true,
  8. "autoGrantPermissions": true,
  9. "udid": "192.168.56.101:5555"
  10. }

Appium日志定位到的Activity

那么之后通过Appium直接启动package而不需重新安装时,直接指定appActivity即可,capability可设置如下:

  1. {
  2. "platformName": "Android",
  3. "platformVersion": "6.0",
  4. "deviceName": "1111111",
  5. "automationName": "Appium",
  6. "appPackage": "com.target.engzo",
  7. "appActivity": ".app.activity.LauncherActivity",
  8. "noReset": true,
  9. "autoGrantPermissions": true
  10. }

 方法二 使用dumpsys命令

应用此方法首先要明确待测package的package name,可通过如下命令获取:

  1. #查看当前device中所有apk对应的package name和path
  2. adb shell pm list package -f
  3. #仅查看第三方的apk package
  4. 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
  1. Cosette:~ cosetteqi$ adb logcat ActivityManager:I *:s
  2. --------- beginning of system
  3. --------- beginning of main
  4. 01-23 14:18:07.737 1075 1243 I ActivityManager: [Background Service Priority Adjustment] Set callerFg as false for service.getFlags():292
  5. 01-23 14:19:17.163 1075 2071 I ActivityManager: moveTaskToBack: TaskRecord{e0cd18d #22922 A=com.tencent.mm U=0 sz=1}
  6. 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
  7. 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
  8. 01-23 14:19:26.134 1075 1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI: +867ms
  9. 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
  10. 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,当然还有其他的方法也可以实现,具体的选择要根据个人使用习惯来确定使用哪种方法了。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/698028
推荐阅读
相关标签
  

闽ICP备14008679号