Appium定位元素的几种方法总结
前言appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,本文以python语言为示例介绍appium中的元素定位方法,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来。
1. 通过id定位
resource-id也称为id,resource-id是唯一的
2. 通过className定位
3. 通过AccessibilityId定位
AccessibilityId也称为content-desc
4. 通过xpath定位
4.1 常规定位
比如我要用text属性的文本值定位,这时候只需要写成xpath表达式
4.2 contains模糊定位
这种经常用于获取toast的时候,toast文本内容较长,可以采用contains包含部分文本的匹配方式。当然,可以用来模糊匹配上面的文本属性“同意并继续”
4.3 组合定位
比如xpath中同时包含class和text两个属性
4.4 层级定位
使用lazy uiautomatorviewer,可以看到底下有个fullIndexXpath,这种是全路径的形式,也是层级的形式
5. 通过Android UIAutomator定位
android uiautomator原理是通过android 自带的android uiautomator的类库去查找元素,其实和appium的定位一样,或者说他比appium的定位方式更佳多以及更佳适用,它也支持id、className、text、模糊匹配等进行定位。
5.1 text定位
5.2 text模糊定位
5.3 textStartsWith定位
5.4 textMatches 正则匹配查找
5.5 resourceID定位
5.6 resourceIDMatches 定位
5.7 className定位
5.8 classNameMatches定位
5.9 组合定位
5.10 父子关系、兄弟关系定位
5.11 滚动查找
6. LazyUiAutomatorViewer
5.3 textStartsWith定位
5.4 textMatches 正则匹配查找
5.5 resourceID定位
5.6 resourceIDMatches 定位
5.7 className定位
5.8 classNameMatches定位
5.9 组合定位
5.10 父子关系、兄弟关系定位
5.11 滚动查找
6. LazyUiAutomatorViewer
5.5 resourceID定位
5.6 resourceIDMatches 定位
5.7 className定位
5.8 classNameMatches定位
5.9 组合定位
5.10 父子关系、兄弟关系定位
5.11 滚动查找
6. LazyUiAutomatorViewer
5.7 className定位
5.8 classNameMatches定位
5.9 组合定位
5.10 父子关系、兄弟关系定位
5.11 滚动查找
6. LazyUiAutomatorViewer
5.9 组合定位
5.10 父子关系、兄弟关系定位
5.11 滚动查找
6. LazyUiAutomatorViewer
5.11 滚动查找
6. LazyUiAutomatorViewer
使用lazy uiautomatorviewer,可以看到底下有个uiaSelector,将其拷贝到代码
UiAutomatorViewer是谷歌在Android4.1及之后的版本中发布的一个用来扫描和分析Android应用程序的UI组件的GUI工具。使用UiAutomatorViewer,可以检查一个App的UI来查看应用的布局、组件以及相关的属性。为了使用UiAutomatorViewer,首先需要下载并安装SDK。安装后,该工具存在于/android-sdk/tools文件夹中,可以通过uiautomatorviewer.bat进行启动。
LazyUiAutomatorViewer是在UiAutomatorViewer源码基础上进行扩展,添加了xpath生成,页面xpath自动一键抓取导出、选择性抓取导出并自动生成java代码的安卓UI自动化测试辅助工具。该工具能大大节省安卓UI自动化实施过程中需要针对每个控件需要单独抓取xpath的时间,使QA只需要专注于测试逻辑的设计,需要使用哪个页面元素和控件,只需要直接使用LazyUiAutomatorViewer自动生成的对应变量即可,真正地使用面向对象的思想进行测试编码,极大地提高了安卓UI自动化测试的编码效率。
使用方法:
一、将LazyUiAutomatorViewer 源码编译生成的jar包uiautomatorviewer.jar拷贝到安卓安装目录下的 android-sdktoolslib 文件夹中替换掉原来的uiautomatorviewer.jar包。
源码及jar包的下载地址: https://github.com/lazytestteam/lazyuiautomatorviewer;
二、双击安卓安装目录下的 android-sdktoolsuiautomatorviewer.bat 文件,启动LazyUiAutomatorViewer 。
三、手机连上电脑,打开手机app中需要测试的某个页面,点击如下的“截屏”按钮进行截屏。
四、根据需要,选择导出当前截屏中所有控件或者只选择部分关心的控件进行导出,导出为java文件。
一键导出当前截屏中的所有控件
如果当前页面大部分的控件都很重要,是测试需要关注的,或者为了节省时间、不太关注代码冗余造成的运行时性能开销,就可以点击如下的按钮,一键导出当前页面截屏中的所有控件。
点击如上图所示的按钮后,会弹出一个控件选择页面。选好需要的控件后,点击“导出到文件”即可。
五、将导出的java代码直接拷贝到使用LazyAndroid框架的安卓测试工程中,即可通过使用导出的java代码中自动定义的变量完成测试逻辑的书写。当然,也可以不使用LazyAndroid测试框架,仅仅把LazyUiAutomatorViewer作为安卓自动化测试中的Xpath导出工具使用也是可以的。
7. appium与selenium元素定位之比较
框架 常用的元素定位方式 备注
appium id, className, AccessibilityId, xpath, AndroidUIAutomator 对于h5页面,也支持selenium的name, link text, css等定位方式
selenium id, className, name, tag name, link text, paratial link text, xpath ,css



