Appium之获取app信息及界面定位方法

  • 2019 年 10 月 11 日
  • 筆記

一、获取APP的package(包名)和activity

在使用android自动化测试工具monkeyrunner和appium中启动应用时,需要填写被测程序的包名和启动的Activity,以下有几种查看应用包名package和入口activity名称的方法:

1.使用aapt//aapt是sdk自带的一个工具,在sdkbuilds-tools目录下

>以手机淘宝APK为例,CMD切换到aapt.exe目录执行:aapt dump badging D:workappiumshoujitaobao_174.apk (放置手机淘宝APK的位置)

>运行后的结果中以下两行分别是应用包名package和入口activity名称

package: name=’com.taobao.taobao’

package

launchable-activity: name=’com.taobao.tao.welcome.Welcome’

activity

注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。

2.各种权限都开启,使用sdk/tools目录下hierarchyviewer.bat 工具可以获得(可以查看对应的app的activity)

hierarchyviewer

3.通过在CMD窗口中执行adb logcat -v time -s ActivityManager查看对应的字段

在CMD窗口中执行adb logcat -v time -s ActivityManager,然后在模拟器或者手机中点击应用进入,如点击系统设置,进入后会有相应的日志信息打印出来,在信息中查找 cmp=com.android.settings/.Settings

二、SDK-tools元素定位工具

1.adroid-sdk的安装目录tools下有1个自带的工具uiautomatorviewer,打开后,如下所示:

uiautomatorviewer元素定位

UI定位界面

2.首先在模拟器或者真机上打开APP软件,进入主界面,然后点击uiautomatorviewer软件左上角的手机图标,如下图

UI工具连接APP

得到的界面如下,选中元素即可看到元素的layout信息,比如下方的定位框即可以通过ID来定位,也可以通过Xpath来定位

UI工具定位APP

三、appium自带的Inspector元素定位工具

Appium Inspector 是 appium 自带的一个元素定位工具。appium Inspector 的 winddows 版本不太好用,但是 Mac 上的功能还是很强大的,一般mac 上用的比较多。

1.设置appium的Android Settings,点击左上角的安卓图标进入安卓设置,注意设置时不要开启appium,也就是不要点击appium右上角的“三角形”按键

Android Settings

说明:

a)Application是对应的应用,用Path的话不管你有没有这个应用,都是重新安装一遍,所以这里直接用了应用的包名和activity;

b)Launch AVD是将要定位的机器,这里选的是模拟器;

2.开启appium,点击右侧的launch(三角形图标按键)开启,然后点击appium上的inspector来进行定位,使用inspector上的refresh可以刷新成当前模拟器的页面(如果当前没有开开任何的安卓模拟器,点击refresh时,他会根据要Android settings中的launch device打开一个模拟器)

设置apk路径并开启appium

Ispector Window

3.可能出现的异常

在使用Ispector过程中,你会发现经常会报以下这个错误,每次启动都会给你手机上重新安装一次应用,并且不能用鼠标指定某个元素,没有uiautomatorviewer使用方便。这里建议大家使用uiautomatorviewer的定位方式

Ispector异常界面

四、元素定位方法

1.格式:find_element_by_定位方式(value)

通过id定位:driver.find_element_by_id("xxx")

通过class_name定位:driver.find_element_by_class_name("android.widget.RelativeLayout")

通过xpath定位:driver.find_element_by_xpath("//android.widget.LinearLayout[1]/android.widget.XXX")

通过name定位:driver.find_element_by_name()

通过text定位:driver.find_elements_by_android_uiautomator("new UiSelector().text("+关注")")

其他定位方法见请参考【每天1990】的博客,感谢分享