=========不积跬步无以至千里==========
在进行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,当然还有其他的方法也可以实现,具体的选择要根据个人使用习惯来确定使用哪种方法了。
===========每日有输入,每日有输出==============