简介
定位策略是用于在自动化测试中定位移动应用界面元素的方法和策略。通过选择合适的定位策略,测试人员可以定位和操作应用程序的各种控件,如按钮、文本框、下拉列表等。常见的定位策略包括 ID 定位、XPath 定位、Class Name 定位、AccessibilityID 定位、Name 定位、XPath 模糊定位、Android UI Automator 定位以及 iOS Predicate 定位。通过灵活运用不同的定位策略,可以提高自动化测试的稳定性和可靠性。
App 定位方式
定位策略 | 描述 |
---|---|
Accessibility ID | 识别一个唯一的 UI 元素,对于 XCUITest 引擎,它对应的的属性名是 accessibility-id,对于 Android 系统的页面元素,对应的属性名是 content-desc |
Class name | 对于 iOS 系统,它的 class 属性对应的属性值会以XCUIElementType开头,对于 Android 系统,它对应的是 UIAutomator2 的 class 属性(e.g.: android.widget.TextView) |
ID | 原生元素的标识符,Android 系统对应的属性名为resource-id,iOS 为name |
Name | 元素的名称 |
XPath | 使用 xpath 表达式查找页面所对应的 xml 的路径(不推荐,存在性能问题) |
Image | 通过匹配 base 64 编码的图像文件定位元素 |
Android UiAutomator (UiAutomator2 only) | 使用 UI Automator 提供的 API, 尤其是 UiSelector 类来定位元素,在 Appium 中,会发送 Java 代码作为字符串发送到服务器,服务器在应用程序的环境中执行这段代码,并返回一个或多个元素 |
Android View Tag (Espresso only) | 使用 view tag 定位元素 |
Android Data Matcher (Espresso only) | 使用 Espresso 数据匹配器定位元素 |
IOS UIAutomation | 在 iOS 应用程序自动化时,可以使用苹果的 instruments 框架查找元素 |
Web 定位方式
定位策略 | 描述 |
---|---|
class name | 通过 class 属性定位元素 |
css selector | 通过匹配 css selector 定位元素 |
id | 通过 id 属性匹配元素 |
name | 通过 name 属性定位元素 |
link text | 通过 text 标签中间的 text 文本定位元素 |
partial link text | 通过 text 标签中间的 text 文本的部分内容定位元素 |
tag name | 通过 tag 名称定位元素 |
xpath | 通过 xpath 表达式匹配元素 |
选择定位器通用原则
-
与研发约定的属性优先 。
-
web 推荐 class。
-
android 推荐 content-description。
-
ios 推荐 label。
-
-
身份属性 id,name(web 定位)。
-
组合定位 xpath,css。
-
其它定位。
元素定位不到
导致 Appium 元素定位不到的原因可能包括定位信息错误、元素未加载完成、元素隐藏或不可见、元素定位策略不准确、Appium 和应用程序版本不兼容以及设备连接或设置问题。要解决这些问题,需要确保定位信息正确、等待元素加载完成、使元素可见、选择合适的定位策略、确保版本兼容性以及正确配置和设置设备。
原因 | 解决方案 |
---|---|
定位不正确 | 在定位工具中先测试定位表达式是否正确 |
存在动态 ID | 定位方式使用 css 或者 xpath 的相对定位 |
页面还没有加载完成 | 添加死等验证,使用显式等待或隐式等待进行优化 |
页面有 iframe | 切换到 iframe 后定位 |
页面切换 window | 切换到对应窗口后定位 |
要定位元素为隐藏元素 | 使用 js 操作该元素 |
混合定位的应用场景
-
场景:
-
属性动态变化(id,text)。
-
重复元素属性(id,text,class)。
-
-
解决:
-
根据相对位置关系进行定位(css、xpath)(父级,子级,兄弟,索引)。
-
使用 find_elements 遍历查找。
-
-
参考高级定位技巧章节(xpath,css)。
使用等待机制的场景
-
场景
-
控件动态出现
-
控件出现特定特征
-
-
解决
-
元素定位结合隐式等待与显式等待
-
特殊控件定位
Web 弹框定位
-
场景
-
web 页面 alert 弹框
-
-
解决:
-
web 需要使用 driver.switchTo().alert() 处理
-
App toast 提示框定位
-
场景:
-
app Toast 提示框。
-
-
解决:
-
使用 driver.page_source 拿到页面布局结构文件,分析 Toast/弹框组件的标签内容。
-
然后通过 id/text/class 等属性,使用 xpath 完成元素定位。
-
结合隐式等待。
-
下拉框/日期控件定位
-
场景:
-
<input>标签组合的下拉框无法定位。
-
<input>标签组合的日期控件无法定位。
-
-
解决:
-
面对这些元素,可以引入 JS 注入技术来解决问题。
-
文件上传定位
-
场景:
-
input 标签文件上传。
-
-
解决:
-
input 标签直接使用 send_keys() 方法。
总结
在选择定位策略时,需要考虑元素的属性、上下文以及应用的特定情况。有时候需要结合多个属性或使用相对定位,以确保定位的准确性和稳定性。此外,使用隐式等待或显式等待是确保元素加载完成的重要步骤,以避免定位超时的问题。
推荐学习
全栈开发与测试定向培养班,内容全面升级,可选择岗位更多,就业面更广。4 个月 30+ 项目实战强化训练,资深测试架构师、开源项目作者亲授 BAT 大厂前沿最佳实践,0基础可学,带你一站式掌握测试开发必备核心技能!增加名企私教服务,针对性解决工作难题。直推 BAT 名企测试经理,简历指导+模拟面试+面试复盘,助你斩获更多Offer!
推荐学习
【霍格沃兹测试开发】7天软件测试快速入门 带你从零基础/转行/小白/就业/ 测试用例设计实战
【霍格沃兹测试开发】最新版!Web自动化测试从入门到精通/电子商务产品实战/Selenium(上集)
【霍格沃兹测试开发】最新版!Web自动化测试从入门到精通/电子商务产品实战/Selenium(下集)
【霍格沃兹测试开发】明星讲师精心打造最新Python教程软件测试开发从业者必学(上集)
【霍格沃兹测试开发】明星讲师精心打造最新Python教程软件测试开发从业者必学(下集)
【霍格沃兹测试开发】精品课合集/自动化测试/性能测试/精准测试/测试左移/测试右移/人工智能测试
【霍格沃兹测试开发】腾讯/百度/阿里/字节测试专家技术沙龙分享合集/精准化测试/流量回放/Diff
【霍格沃兹测试开发】Pytest用例结构/编写规范 /免费分享
【霍格沃兹测试开发】JMeter实时性能监控平台/数据分析展示系统Grafana/Docker安装
【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?
【霍格沃兹测试开发】面试技巧指导/测试开发能力评级/1V1模拟面试实战/冲刺年薪百万!
【霍格沃兹测试开发】腾讯软件测试能力评级标准/要评级表格的联系我
【霍格沃兹测试开发】Pytest与Allure2一键生成测试报告/测试用例断言/数据驱动/参数化
【霍格沃兹测试开发】App功能测试实战快速入门/adb常用命令/adb压力测试
【霍格沃兹测试开发】阿里/百度/腾讯/滴滴/字节/一线大厂面试真题讲解,卷完拿高薪Offer!
【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置
【霍格沃兹测试开发】如何用Postman做接口测试,从入门到实战/接口抓包(最新最全教程)
【霍格沃兹测试开发】6小时轻松上手功能测试/软件测试工作流程/测试用例设计/Bug管理
【霍格沃兹测试开发】零基础小白如何使用Postman,从零到一做接口自动化测试/从零基础到进阶到实战
【霍格沃兹测试开发】建议收藏全国CCF测试开发大赛Python接口自动化测试赛前辅导 /项目实战
新手专区--7小时入门软件测试
【软件测试教程】如何根据招聘需求选择最值得入职的软件测试岗位?
【软件测试教程】能进入BAT一线互联网大厂的优质软件测试简历必须包含的7大板块
软件测试工程师简历面试教程攻略--如何写出能进BAT大厂测开岗的优质简历?如何在面试中向HR要到更高薪资?如何拿到更高级别的offer?--持续更新!
【软件测试教程】自动化测试入门-只能二维码登录,自动化测试怎么做?
【软件测试教程】面试现写10个linux命令,写不出来怎么办(上)
【软件测试教程】面试现写10个linux命令,写不出来怎么办(下)
【软件测试教程】自动化测试-比fiddler更好用的抓包工具,你知道吗?
【软件测试教程】自动化测试-如何使用selenium自动发邮件
【软件测试教程】软件测试入门进阶-测试新人的如何学习更容易涨薪
【软件测试教程】Allure一节课学会生成业内最优秀的自动化测试报告
【软件测试教程】自动化测试-selenium grid 搭建分布式测试平台
【软件测试教程】Appium自动化测试-实现企业微信自动打卡
【软件测试教程】自动化测试神器-charles抓包工具的使用
测试开发公开课
【软件测试教程】移动端自动化测试appium电商自动下单流程
【软件测试教程】面试官让你现写10个Linux命令,怎么写?
【软件测试教程】面试加分的移动端自动化测试技巧-高级定位技巧
【软件测试教程】一节课入门BAT级别的测试开发知识点springboot
【软件测试教程】Java测试平台开发入门篇之vue基础语法实战
接口测试入门到实战精通
【软件测试教程】session、cookie、token区别
【软件测试教程】一节课入门BAT级别的测试开发知识点springboot
【软件测试教程】性能测试压测实战-JMeter+InfluxDB+Grafana压测数据展示
【软件测试教程】高级软件测试必备-管理测试环境必备工具Shell
【软件测试教程】软件测试面试实战-面试现写sql查询语句写不出来怎么办
【软件测试教程】零基础学测试如何比别人更快拿到好的offer
【软件测试教程】移动端自动化测试-使用APPIUM实现电商APP下单流程
【软件测试教程】软件测试数据库-面试现写sql查询语句写不出来怎么办
【软件测试教程】高级测试开发教程-Docker一条命令搭建测试流程管理环境
【软件测试教程】软件测试高薪秘籍-零基础学测试如何比别人拿到更高薪的offer
【软件测试教程】自动化测试教程-经典面试题java多线程你熟悉吗?
【软件测试教程】高级软件测试开发-面试官都喜欢问的高级定位原理你知道吗
【软件测试教程】appium移动端自动化测试实现电商app下单流程
【软件测试教程】自动化测试必备-面试官问java如何读写文件,你怎么回答
【软件测试教程】软件测试开发持续集成利器-jenkins快速上手
【软件测试教程】自动化测试-Python与经典面试题手写冒泡排序
【软件测试教程】软件测试数据库专题-面试现写sql查询语句写不出来怎么办
【软件测试教程】软件测试之shell实战项目-实现脚本抽奖小程序
【软件测试教程】软件测试实战项目系列-老板让我自己组建测试流程
【软件测试教程】自动化测试基础教程-如何使用自动化工具投简历
【软件测试教程】帮你搞定自动化测试平台与兼容性测试-stf平台
【软件测试教程】高级性能测试-JMeter+InfluxDB+Grafana压测数据展示
【软件测试教程】Java自动化测试平台开发入门篇之初识springboot
【软件测试教程】web自动化测试框架selenium-UI自动化测试如何绕过二维码登录
【软件测试教程】httprunner使用HttpRunner高效实现接口测试自动化
【软件测试教程】移动端自动化测试-Appium环境搭建及入门
【软件测试教程】自动化测试入门教程-python分支结构和循环结构
【软件测试教程】自动化测试入门教程-python模块与输入输出
【软件测试教程】软件测试零基础自学教程-linux系统 与shell环境准备
【软件测试教程】Java测试平台开发入门篇之vue基础语法实战
【软件测试教程】自动化测试教程-pageobject企业微信实战
【软件测试教程】APP自动化测试-appium原理解析与九宫格解锁
【软件测试教程】接口测试教程-httprunner的基础使用
【软件测试教程】软件测试教程-mysql数据库环境搭建与表结构创建修改操作
【软件测试教程】自动化测试入门教程-seleniumIDE录制以及常用api
【软件测试教程】Python自动化测试入门-python字符串数据结构
【软件测试教程】web自动化测试selenium高级用法-CssSelector
【软件测试教程】移动端app自动化测试-Appium环境搭建及入门
【软件测试教程】接口测试入门实战-基于企业微信api进行接口测试
【软件测试教程】自动化测试selenium高级用法-xpath定位
【软件测试教程】自动化测试必会-python条件、循环表达式
【软件测试教程】接口测试工具之charles高级用法代理抓包+数据篡改
【软件测试教程】Java自动化测试平台初识springboot
【软件测试教程】高级软件测试开发服务集群架构docker+k8s
【软件测试教程】自动化测试平台与兼容性测试-STF多设备管理平台
【测试教程】APP自动化测试 Page Object实战-思寒
【测试教程】Linux三剑客实战--shell经典面试题大解密
【APP自动化测试教程】使用Page Object设计模式提高自动化测试脚本的可维护性
接口测试
【接口测试】rest-assured高级进阶-对接口时间进行断言、导出数据【软件测试】
【接口测试】rest-assured高级进阶-发送json请求【软件测试】
【接口测试】移动端代理抓包-数据拦截与修改实战演练【软件测试】
【接口测试】移动端代理抓包-数据拦截与修改方法教学【软件测试】
【接口测试】HTTP协议组成及客户端模拟请求工具【软件测试】
【接口测试】HTTP协议-代理工具抓包和篡改结果【软件测试】
【软件测试】接口测试入门到实战精通-协议、框架、持续集成、断言、运行与维护-教你如何从零开始搞定接口测试
【软件测试】java语言rest-assured框架进行接口测试实战
【测吧】软件测试开发BAT一线名企面试指南-小白慎点-(霍格沃兹测试学院)
6.【测吧】软件测试开发-研发阶段的质量保证(测试左移)-【7小时入门软件测试】
7.【测吧】测试开发-发布后的质量监控(测试右移)-【7小时入门软件测试】
9.【测吧】企业招人标准--软件测试高薪秘诀-【7小时入门软件测试】
10.【测吧】如何写好简历--软件测试高薪秘诀-【7小时入门软件测试】
11.【测吧】面试技能技巧--软件测试高薪秘籍-【7小时入门软件测试】
12.【测吧】真实案例分析--软件测试高薪秘籍-【7小时入门软件测试】
【测吧】手机浏览器、webview、微信小程序自动化软件测试