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,尤其在页面层级结构复杂时。

相关推荐
博图光电1 天前
博图机械臂:以智能精度,重塑多行业自动化新生态
运维·自动化
2501_916008891 天前
手机 iOS 系统全解析,生态优势、开发机制与跨平台应用上架实践指南
android·ios·智能手机·小程序·uni-app·iphone·webview
I烟雨云渊T1 天前
iOS原生与Flutter的交互编程
flutter·ios·交互
小安运维日记1 天前
RHCA - DO374 | Day01:使用红帽Ansible自动化平台开发剧本
运维·服务器·云原生·自动化·云计算·ansible
马拉萨的春天1 天前
iOS的动态库和静态库的差异区别以及静态库的好处
macos·ios·cocoa
肖老师xy1 天前
苹果(IOS)制作开发和发布证书
ios
马拉萨的春天1 天前
探索Objective-C中的对象复制:深入理解copy和mutableCopy
开发语言·ios·objective-c
00后程序员张1 天前
Fiddler使用教程,全面掌握Fiddler抓包工具的配置方法、代理设置与调试技巧(HTTPHTTPS全解析)
前端·测试工具·ios·小程序·fiddler·uni-app·webview
2501_916008891 天前
HTTPS 下的 DDoS 防护与抓包分析实战,从检测到快速缓解的工程化打法
网络协议·ios·小程序·https·uni-app·iphone·ddos
2501_915918411 天前
App 使用 HTTPS 的工程化实战,从接入到真机排查的一线指南
android·ios·小程序·https·uni-app·iphone·webview