基于appium的常用元素定位方法

一、元素定位工具

  app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位。

1.uiautomatorviewer.bat

  uiautomatorviewer.bat工具在安装完ADT工具之后,位于ADT安装路径的android-sdk-windows\tools\bin目录下

 双击启动即可,启动之后,在初始界面上,点击如图位置按钮可以进行截屏

 截屏后即可查看各个元素,截屏后的效果:

2.appium检查器

  在appium启动后的日志窗口界面,点击"启动检查器会话",会跳转到检查器启动参数配置界面,参数配置直接将我们代码里面的启动参数搬过来就可以了。

 点击启动后,会根据我们配置的应用信息,自动跳转到应用的主页面,我们就可以开始进行元素定位了:

二、常用元素定位方法

  appium从selenium中继承了所有的元素定位方法,并且增加了自己的一些方法,我们先看看appium的源码:

  但是从继承selenium中的定位方法中,一般只会用到id、class_name、xpath这三种方法,总结起来,appium中常用的定位方法一般有以下五种:

通过id定位:resource-id

通过class_name定位:class

通过accessibility_id定位:content-desc

通过android_uiautomator定位:SDK自带的java开发的uiautomator自动化框架

通过xpath定位

  UIAutomator介绍:     

  UIAutomator是安卓移动端的UI自动化框架,要求:Android4.3以上

提供了一系列API:执行UI测试在系统或者第三方app上面

允许在被测设备上执行操作,比如打开系统设置菜单

适合编写黑盒自动化测试

  UIAutomator框架的主要特点:

元素定位:UI Automator Viewer。扫描、分析待测应用的UI组件的图像工具

元素操作:Accessing device state。在目标设备和app上各种操作

元素识别:UI Automator APIs。在多个应用程序中捕获和操作UI组件

1.id定位

driver.find_element_by_id() 或者 MobileBy.ID

注意这里是使用resource-id,而不是id

loc = (MobileBy.ID, 'com.taobao.taobao:id/iv_image')

2.class_name定位

driver.find_element_by_class_name() 或者 MobileBy.CLASS_NAME

直接使用class即可

loc = (MobileBy.CLASS_NAME, 'android.widget.ImageView')

3.accessibility_id定位

driver.find_element_by_accessibility_id() 或者 MobileBy.ACCESSIBILITY_ID

这里使用content-desc即可

loc = (MobileBy.ACCESSIBILITY_ID, '管理')

4.android_uiautomator定位

driver.find_element_by_android_uiautomator() 或者 MobileBy.ANDROID_UIAUTOMATOR

该方法的参数为UiSelector类定位元素的表达式:

new UiSelector().函数名称('定位表达式')

实例化一个UiSelector对象,然后通过实例接口调用,具体用到的一些方法参考官网的说明,网址:

这里调用UiSelector对象的text()方法即可,更多的方法请参考上述地址

注意字符串必须要用双引号

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("去逛逛")')

5.xpath定位

driver.find_element_by_xpath() 或者 MobileBy.XPATH

注意这里的标签名一定是使用class来作为xpath的标签名,在这里不同于selenium,并且遇到text文本定位的时候,使用的是text而不是text()

loc = (MobileBy.XPATH, '//android.widget.TextViewtext="首页"')

三、组合定位

使用的是UIAumtomator下的方法,因为UiSelector类下的方法都反回了对象本身,因此可以连续调用各种方法,这种使用方法即组合定位

我们可以连续调用三个方法进行组合

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView").text("家装").index(2)')

四、父子定位

调用UiSelector类的childSelector()方法,在该方法里面传入子代的元素定位表达式

比如刚刚"家装"的父节点属性如下

那么我们的定位表达式可以通过父子定位来实现

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.LinearLayout").childSelector(text("家装"))')

五、兄弟定位

同理,我们调用fromParent()方法,表示定位同级的兄弟元素

已知了"首页"按钮为本元素,text属性为"首页",则通过该元素来定位"百货元素"

复制代码
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("首页").fromParent(text("百货"))')
总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

相关推荐
_日拱一卒6 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
jiayong237 小时前
AI架构师面试题库 - 完整汇总文档
人工智能·面试·职场和发展
风筝在晴天搁浅9 小时前
美团 LeetCode 692.前K个高频单词
算法·leetcode·职场和发展
我爱cope10 小时前
【Agent智能体13 | 工具使用-什么是工具?】
人工智能·语言模型·职场和发展
he___H10 小时前
面试场景题
面试·职场和发展
ychqsq13 小时前
39.新年
经验分享·职场和发展
我命由我1234513 小时前
UGC、PGC、PUGC 极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
Komorebi_999913 小时前
Day6:微调 vs RAG 场景区分(面试高频)
面试·职场和发展
英俊潇洒美少年13 小时前
Vue2 $set 深度解析 + 批量更新全套优化方案(原理+实战+踩坑+面试)
面试·职场和发展·wps
其实防守也摸鱼13 小时前
告别单个变量,用列表和字典批量管理你的 Python 数据
开发语言·网络·软件测试·python·web安全·数据结构,编程教程