如何选择最佳的自动化测试定位策略?

定位策略是用于在自动化测试中定位移动应用界面元素的方法和策略。通过选择合适的定位策略,测试人员可以定位和操作应用程序的各种控件,如按钮、文本框、下拉列表等。常见的定位策略包括 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() 方法。

总结

在选择定位策略时,需要考虑元素的属性、上下文以及应用的特定情况。有时候需要结合多个属性或使用相对定位,以确保定位的准确性和稳定性。此外,使用隐式等待或显式等待是确保元素加载完成的重要步骤,以避免定位超时的问题。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值