iOS UI自动化 Appium的元素定位方式及比较

1. AppiumBy.ACCESSIBILITY_ID

描述:使用元素的accessibilityIdentifier属性定位,例如, 按钮、文本框、图标等被开发者专门设置了accessibilityIdentifier属性的控件,iOS上最推荐使用这种方式。
适用场景:元素被赋予了唯 一的accessibilityIdentifier。
性能:高效、准确,推荐优先使用。

2. AppiumBy.ID

描述:使用唯一的资源ID定位,适合Android,在iOS中较少使用。
适用场景:iOS通常不具备Android的resource-id,除非特别设置。
性能:非常高效,但不推荐在iOS中使用。

3. AppiumBy.IOS_UIAUTOMATION

描述:已被弃用的定位方法,通过iOS的UIAutomation库(iOS 10以下支持)。
适用场景:老版本的iOS (<10)。
性能:较低效,不推荐在现代iOS设备中使用。

4. AppiumBy.XPATH

描述:通过元素的层级结构路径查找。
适用场景:在复杂页面结构中定位没有唯一标识的嵌套元素。
性能:性能较低,尤其在深层嵌套时速度很慢,应尽量避免。

5. AppiumBy.CLASS_NAME

描述:通过元素的类名定位,如XCUIElementTypeButton。
适用场景:用于定位某类的所有元素,适合简单页面。
性能:一般。若仅返回一个类的单个元素,效果良好;若页面复杂,可能影响性能。

6. AppiumBy.CSS_SELECTOR

描述:通过CSS选择器定位元素,一般适用于Web内容。
适用场景:适合自动化WebView内容,但iOS原生应用较少使用。
性能:在WebView中效率尚可,但在原生App中不适用。

7. AppiumBy.CUSTOM

描述:允许自定义定位策略。
适用场景:适用于特殊需求的高级自定义定位,通常需配合Appium插件。
性能:性能根据自定义策略的实现方式而定。

8. AppiumBy.IMAGE

描述:通过图像识别定位元素。
适用场景:UI元素动态变化且没有唯一标识时适用。
性能:效率低,图像匹配算法复杂,识别时间较长,且成功率受屏幕分辨率影响。

描述:用于通过链接文本定位元素,通常在Web自动化中使用。
适用场景:适用于WebView,原生App中不常用。
性能:在WebView中效率较高,原生App中不适用。

10. AppiumBy.NAME

描述:使用元素的name属性进行定位,类似于ACCESSIBILITY_ID。
适用场景:当元素具有name属性,且该属性是唯一标识时。
性能:高效,与ACCESSIBILITY_ID相近,适合使用。

描述:通过部分链接文本定位,适用于Web自动化。
适用场景:适合WebView,在iOS原生应用中不常用。
性能:仅在WebView中效率高。

12. AppiumBy.TAG_NAME

描述:通过HTML标签名定位,一般用于Web自动化。
适用场景:WebView内容适用,原生App中较少使用。
性能:在WebView中效率高,原生App中无效。

13. AppiumBy.WINDOWS_UI_AUTOMATION

描述:用于Windows应用的UI自动化,不适用于iOS。
适用场景:Windows App自动化。
性能:与iOS无关。

14. AppiumBy.IOS_PREDICATE

描述:使用iOS Predicate String定位,通过条件表达式筛选元素。
适用场景:用于有特定属性组合或条件的元素,适合需要通过属性筛选的复杂定位需求,例如根据元素的labelnamevalue等多个属性定位满足特定条件的控件。
性能:效率较高,适合组合属性过滤的复杂定位需求。

15. AppiumBy.IOS_CLASS_CHAIN

描述:通过iOS Class Chain定位,用路径表示层级结构查找。
适用场景:用于定位层级较深或复杂的元素,需要按层级路径查找嵌套元素(如列表中的某一项,或层级较深的子控件),可以避免XPath带来的性能问题。
性能:比XPath更高效,是定位多层次结构时的推荐方案。

性能对比总结

优先推荐:ACCESSIBILITY_ID、IOS_CLASS_CHAIN、IOS_PREDICATE。这些方法在性能和可维护性方面较优。
次优选择:CLASS_NAME、NAME,用于结构简单或仅根据类名查找的情况。
避免使用:XPATH,尤其在页面层级结构复杂时。

相关推荐
hunteritself几秒前
谷歌Gemini发布iOS版App,live语音聊天免费用!
人工智能·ios·chatgpt·openai·语音识别
解压专家6661 小时前
7z 解压器手机版与解压专家:安卓解压工具对决
ios·智能手机·winrar·7-zip
袁代码2 小时前
SwiftUI开发教程系列 - 第十二章:本地化与多语言支持
开发语言·前端·ios·swiftui·swift·ios开发
️ 邪神3 小时前
【Android、IOS、Flutter、鸿蒙、ReactNative 】水平布局
flutter·ios·鸿蒙·reactnative·anroid
HelpHelp同学3 小时前
如何利用知识中台实现客户服务自动化?
运维·自动化·知识库软件·内部知识库·搭建知识库
徐寿春4 小时前
SpringBoot -- 自动化装配源码
spring boot·后端·自动化
StringKai4 小时前
表单自动化填写-JavaScript脚本
运维·自动化
软件聚导航7 小时前
uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑
android·ios·uni-app
_.Switch9 小时前
Django SQL 查询优化方案:性能与可读性分析
开发语言·数据库·python·sql·django·sqlite·自动化