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

news2024/11/15 15:45:11

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元素动态变化且没有唯一标识时适用。
性能:效率低,图像匹配算法复杂,识别时间较长,且成功率受屏幕分辨率影响。


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


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


11. AppiumBy.PARTIAL_LINK_TEXT
描述:通过部分链接文本定位,适用于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,尤其在页面层级结构复杂时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL(5)【数据类型 —— 字符串类型】

阅读导航 引言一、char&#x1f3af;基本语法&#x1f3af;使用示例 二、varchar&#x1f3af;基本语法&#x1f3af;使用示例 三、char 和 varchar 比较四、日期和时间类型1. 基本概念2. 使用示例 五、enum 和 set&#x1f3af;基本语法 引言 之前我们聊过MySQL中的数值类型&…

湾区聚力 开源启智 | 2024 CCF中国开源大会暨第五届OpenI/O启智开发者大会闪耀深圳

当下&#xff0c;全球数字化浪潮席卷而来&#xff0c;开源技术已成为科技创新和产业升级的关键驱动力。11月9-10日&#xff0c;以“湾区聚力 开源启智”为主题的2024 CCF中国开源大会在深圳隆重举行。本届大会由中国计算机学会主办&#xff0c;CCF开源发展委员会、鹏城实验室、…

Linux基本指令(中)(2)

文章目录 前言一、echo二、cat三、more四、less五、head六、tail七、date八、cal九、find十、whoami十一、clear总结 前言 承上启下&#xff0c;我们再来看看另外一些常用的基础指令吧&#xff01; 一、echo 语法&#xff1a;echo [选项] [字符串] 功能&#xff1a;在终端设备上…

MYSQL中JDBC的使用

一、JDBC基础概念 JDBC 是Java 中的一组API&#xff0c;用于执行SQL 操作&#xff08;例如CRUD 操作&#xff1a;增、删、改、关系&#xff09;&#xff0c;同时可以和各种类型的数据库类型进行连接&#xff08;MySQL、Oracle、SQL Server 等&#xff09;。 JDBC是Java标准库的…

UnixBench和Geekbench进行服务器跑分

1 概述 服务器的基准测试&#xff0c;常见的测试工具有UnixBench、Geekbench、sysbench等。本文主要介绍UnixBench和Geekbench。 1.1 UnixBench UnixBench是一款开源的测试UNIX系统基本性能的工具&#xff08;https://github.com/kdlucas/byte-unixbench&#xff09;&#x…

基于Java Springboot人力资源管理系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL8.0…

使用OpenCV(C++)通过鼠标点击操作获取图像的像素坐标和像素值

使用OpenCV&#xff08;C&#xff09;通过鼠标点击操作获取图像的像素坐标和像素值 在这篇博客中&#xff0c;我们将介绍如何使用OpenCV库在C中实现鼠标点击操作&#xff0c;以获取图像的像素坐标和像素值。代码分为两个部分&#xff1a;一个是鼠标事件处理的回调函数&#xff…

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code&#xff0c;选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code&#xff0c;同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

AI斩获6枚金牌!华为Kaggle大师级智能体诞生,自主解决数据科学难题

继 OpenAI o1 成为首个达到 Kaggle 特级大师的人工智能&#xff08;AI&#xff09;模型后&#xff0c;另一个 Kaggle 大师级 AI 也诞生了。 根据 Kaggle 的晋级系统&#xff0c;由华为诺亚方舟实验室和伦敦大学学院团队联合推出的端到端自主数据科学智能体&#xff08;agent&a…

[Mysql基础] 表的操作

一、创建表 1.1 语法 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c;如果没有指定字符集…

04 简单神经网络推导及实现(C++/C)

简单神经网络推导及实现&#xff08;C/C&#xff09; 代码见A simple neural network - stock price prediction as an example(C/C) 1. 主要模块 Neuron.h&#xff1a;用于声明神经元类和构造函数。Layer.h&#xff1a;用于声明网络层类和构造函数。NNet.h&#xff1a;用于…

Mybatis配置文件的增删改查功能

Mybatis配置文件的增删改查功能 查询—条件查询 //resources里面的org.example.mapper中的BrandMapper.xml文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://…

【2024软考架构案例题】你知道什么是 RESTful 风格吗?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

51单片机应用开发---LCD1602显示应用

实现目标 1、了解LCD1602液晶屏&#xff1b; 2、掌握驱动程序的编写&#xff1b; 3. 具体目标&#xff1a;在屏幕上显示字符。 一、LCD1206概述 1.1 定义 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置…

如何修改npm包

前言 开发中遇到一个问题&#xff0c;配置 Element Plus 自定义主题时&#xff0c;添加了 ElementPlusResolver({ importStyle: "sass" }) 后&#xff0c;控制台出现报错&#xff0c;这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量&#xff0c;虽然当前…

【原创】java+ssm+mysql校园疫情防控管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Python模拟键盘输入,解放双手

文章目录 Python模拟键盘输入&#xff0c;解放双手一、引言二、pyautogui库的详细介绍1、安装与配置2、键盘输入函数3、特殊按键和组合键 三、实用示例1、自动填写表单2、自动发送邮件3、自动化数据录入 四、总结 Python模拟键盘输入&#xff0c;解放双手 一、引言 在自动化办…

人工智能时代下对人的价值反思?

一、员工价值物化 在现代企业的运作中&#xff0c;资本管理层之间的权力博弈与资源争夺有时呈现出了激烈的内斗态势。这种冲突不仅仅局限于单一部门内部&#xff0c;而是波及到跨部门乃至不同业务小组间的战略部署与资源配置上。各部门经理们既要竭力确保自身团队的利益最大化…

【Qt实现虚拟键盘】

Qt实现虚拟键盘 &#x1f31f;项目分析&#x1f31f;实现方式&#x1f31f;开发流程 &#x1f31f;项目分析 需求&#xff1a;为Linux环境下提供可便捷使用的虚拟键盘OS环境&#xff1a;Windows 7/11、CentOS 7开发语言&#xff1a;Qt/C IDE&#xff1a;QtCreator 、Qt5.14.2功…

APT 参与者将恶意软件嵌入 macOS Flutter 应用程序中

发现了一些恶意软件样本&#xff0c;这些样本据信与朝鲜民主主义人民共和国 (DPRK)&#xff08;又称北朝鲜&#xff09;有关&#xff0c;这些样本使用 Flutter 构建&#xff0c;Flutter 的设计可以对恶意代码进行混淆。JTL 深入研究了恶意代码的工作原理&#xff0c;以帮助保护…