其他分享
首页 > 其他分享> > 基于appium的自动化元素定位方法

基于appium的自动化元素定位方法

作者:互联网

连接真机或者模拟器
通过命令adb devices 查看是否已连接上
如下图表示已连接上
在这里插入图片描述
以下内容均是在已连接上真机或者模拟器的前提条件下进行:

元素定位工具
1.uiautomatorviewer.bat
  uiautomatorviewer.bat工具在安装完ADT工具之后,位于ADT安装路径的android-sdk-windows\tools\bin或者android-sdk-windows\tools目录下
双击启动即可,启动之后,在初始界面上,点击如图位置按钮可以进行截屏
在这里插入图片描述
截屏后即可查看各个元素,截屏后的效果:
在这里插入图片描述

上面步骤有的会不成功,也可以通过以下方式进行操作
通过命令截图取源码放到本地
命令如下:
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix G:\app_pic_screen\test_appium_uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png G:\app_pic_screen\test_appium
再同样打开uiautomatorviewer.bat,点击左上角文件图标录入对应命令取到的文件点击ok即可达到第一种方式的效果
在这里插入图片描述
还可以通过另外一种工具来进行元素的定位(WEditor)
WEditor可以理解为在浏览器中打开的uiautomatorviewer.bat,个人感觉该方法比打开uiautomatorviewer.bat的好用
1、安装WEditor
1)在cmd中输入命令:pip install uiautomator2
2)在cmd中输入命令:python -m uiautomator2 init
3)在cmd中输入命令:pip install weditor
2、启动运行WEditor
在cmd中输入命令:python -m weditor
也可以为以后方便启动不会一直需要敲命令可以在在cmd中输入命 令:
python -m weditor —shortcut
然后就会在电脑桌面有个快捷键
在这里插入图片描述以后直接双击 该快捷键即可启动WEditor
3、启动WEditor后会打开如下:
在这里插入图片描述
同时也会打开浏览器进入启动页面:
在这里插入图片描述
然后点击 connnet 等待连接成功,连接成功标识如下:
在这里插入图片描述
后续的定位操作即可在该浏览器上完成。

2.appium检查器
  在appium启动后的日志窗口界面,点击“启动检查器会话”,会跳转到检查器启动参数配置界面,参数配置直接将我们代码里面的启动参数搬过来就可以了。
   在这里插入图片描述
  点击启动后,会根据我们配置的应用信息,自动跳转到应用的主页面,我们就可以开始进行元素定位了:

app元素定位方法
  appium的定位方法从selenium中继承了所有的元素定位方法,同时也增加了自己的一些方法,也就是说我们完全可以使用web中selenium定位元素的所有方法,也可以使用appium中独有的定位方法:
  一般比较常见的有以下:

# app_driver.find_element_by_android_uiautomator("")
# app_driver.find_element_by_accessibility_id("")
# app_driver.find_element_by_id("")
# app_driver.find_element_by_class_name("")
# app_driver.find_element_by_xpath("")

注意:以上分别对应着
通过android_uiautomator定位:SDK自带的java开发的uiautomator自动化框架
通过accessibility_id定位:uiautomatorviewer.bat上对应的是content-desc,根据对比在weditor上面对应的是description
通过id定位:resource-id
通过class_name定位:class
通过xpath定位
一般较少的使用xpath进行定位,xapth在app自动化元素定位当中是相对来说不够稳定。

1、android_uiautomator定位
driver.find_element_by_android_uiautomator() 或者 MobileBy.ANDROID_UIAUTOMATOR
此方法传的参数为UiSelector类定位元素的表达式如下:
new UiSelector().函数名称(‘定位表达式’)
实例化一个UiSelector对象,然后通过实例接口调用,具体请参考官网说明:网址:https://developer.android.com/training/testing/ui-automator.html#ui-automator-viewer
实例接口:

在这里插入图片描述
在这里插入图片描述
取个栗子:
在这里插入图片描述
需要定位到首页这个元素:

element = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("首页")')

2、accessibility_id定位
取个栗子:
在这里插入图片描述
需要定位到首页这个元素:

element = (MobileBy.ACCESSIBILITY_ID, "饿了么")

3、id定位
取个栗子:
在这里插入图片描述
需要定位到首页这个元素:

element = (MobileBy.ID, "com.taobao.taobao:id/iv_image")

4、class_name定位
取个栗子:
在这里插入图片描述
需要定位到首页这个元素:

element = (MobileBy.CLASS_NAME, "android.widget.ImageView")

5、xcpath定位
举个栗子:
在这里插入图片描述
需要定位到首页这个元素:

element = (MobileBy.XPATH, '//*[@content-desc="饿了么"]')

还有一些其他定位
1、组合定位
组合定位一般使用的方法是UIAumtomator下的方法,因为UiSelector类下的方法都反回了对象本身,因此可以连续调用各种方法,这种使用方法即组合定位
在这里插入图片描述
组合定位方法如下:

element = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.FrameLayout").description("饿了么")')

2、父子定位
调用UiSelector类的childSelector()方法,在该方法里面传入子代的元素定位表达式
这里就不截图举例了

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("class_name").childSelector(text("text"))')

3、兄弟定位
通父子定位,我们调用fromParent()方法,表示定位同级的兄弟元素

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("text1").fromParent(text("text2"))')

注意UiSelector官方文档说明是国外的地址(你懂的),需要翻墙。

标签:定位,appium,UiSelector,MobileBy,app,元素,element,自动化
来源: https://blog.csdn.net/ZuiSi/article/details/104840138