Appium+Python3+iOS定位元素
前言:
最近在做IOS自动化测试,IOS的Appium环境都配置OK,执行起来真的慢,慢到怀疑人生,那么今天就来总结一下IOS定位方式和各个定位方式的速度排序。
据我观察,按查找元素的顺序速度,从快到慢的顺序如下:
ios_predicate >> accessibility_id >> class_name >>xpath
注⚠️:(论坛比较多的说法是class_name>>accessibility_id,在这里我们姑且认为它们的速度是一样的。)
1、元素属性介绍

type:元素类型,与className作用一致,如:XCUIElementTypeButton
value: 一般不用
name:元素的文本内容,可用作 AccessibilityId定位方式,如:ClearEmail
label:绝大多数情况下,与 name 作用一致
enabled:元素是否可点击,一般值为true或者false
visible;元素是否可见,一般值为true或者false
2、ios_predicate
在 iOS 的 UI 自动化中,使用原生支持的Predicate定位方式是最好,可支持元素的单个属性和多个属性定位,强烈推荐使用。
使用方法,举例如下:
driver.find_element_by_ios_predicate("value == 'ClearEmail'")
driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")
1)比较运算符:>、<、==、>=、<=、!=
可用于数值和字符串的比较:
如:value>100 或 value == 'ClearEmail' 或 value != 'ClearEmail'
driver.find_element_by_ios_predicate("value>100")
2)范围运算符:IN、BETWEEN
可用于数值和字符串的范围核对
如:value BETWEEN {1,6} 或 value IN {'Clear','Email'}
driver.find_element_by_ios_predicate("value BETWEEN {1,6}")
3)字符串相关:CONTAINS、BEGINSWITH、ENDSWITH
包含某个字符串,如:value CONTAINS 'Email'
以某个字符串开头,如:value BEGINSWITH 'Clear'
以某个字符串结束,如:value ENDSWITH '班级Email'
driver.find_element_by_ios_predicate("value CONTAINS 'Email'")
4)通配符: LIKE
其中:?代表一个字符,*代表多个字符
如:一个元素的value属性为ClearEmail:
value LIKE 'Clear?mail'
value LIKE 'Clear*'
以上这么多种文本都可以被识别为同一个元素。
driver.find_element_by_ios_predicate("value LIKE 'Clear*'")
5)正则表达式:MATCHES
如:一个元素的value属性为ClearEmail:
value MATCHES '^C.+l$'
driver.find_element_by_ios_predicate("value MATCHES '^C.+l$'")
注⚠️:正则表达式详情可参考我的另一篇文章《Python-正则表达式》
6)两种及两种以上属性定位元素:AND
单个属性定位用符号AND连接起来即可,如下:
driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")
3、accessibility_id
替代以前的name定位方式,在 iOS 上,主要使用元素的label或name(两个属性的值都一样)属性进行定位,如该属性为空,也是不能使用该属性。
driver.find_element_by_accessibility_id('ClearEmail')
4、class_name
使用元素的type属性定位,特别注意该属性的唯一性!class_name唯一的情况并不多,一般情况下用不上。
driver.find_element_by_class_name('XCUIElementTypeButton')
5、xpath
由于 iOS 10开始使用的 XCUITest 框架原生不支持,定位速度很慢,所以官方现在不推荐大家使用,也有其他替代的定位方式可使用。
1)使用绝对路径定位:
driver.find_element_by_xpath('/XCUIElementTypeApplication/XCUIElementTypeButton')
2)使用相对路径定位
driver.find_element_by_xpath('//XCUIElementTypeButton')
3)通过元素的索引定位
driver.find_element_by_xpath('//XCUIElementTypeButton[index]')
4.通过元素的属性定位
一种属性:
driver.find_element_by_xpath("//className[@value='ClearEmail']")
两种属性:
driver.find_element_by_xpath("//className[@value='ClearEmail'][@ visible =true]")
部分属性(最强大):driver.find_element_by_xpath("//className[contains(@value,'ClearEmail')]")
以上,对你有帮助的话,点赞❤️吧~~
欢迎关注我的简书,博客,TesterHome,Github~~~
Appium+Python3+iOS定位元素的更多相关文章
- appium 使用findElementByAndroidUIAutomator 定位元素示例
appium 使用findElementByAndroidUIAutomator 定位元素示例 import io.appium.java_client.remote.MobileCapability ...
- Appium之uiautomator定位元素
元素定位方式有多种,Android也有自身独有的定位方式.下面就单独介绍其基于uiautomator定位元素的方法: 基本语法: driver.find_element_by_android_uiau ...
- Appium 使用android_uiautomator定位元素时报错: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource
使用 android_uiautomator 定位元素时(现在用的还不太熟,对于这个方法还需要加深了解)报错: 报错信息:The requested resource could not be fou ...
- Appium之xpath定位元素
原文:http://www.cnblogs.com/cnkemi/p/9180525.html appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方 ...
- Appium+Python3+iOS真机环境搭建
Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用. 本次环境配置相关:macOS:10.13.4Appium-desktop:1. ...
- 【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结
环境: Appium:1.9.1 Appium-desktop:1.7.1 Xcode:10.0 IOS:iPhone5S(10.3.3) Mac:10.13.6 ①获取手机屏幕size:长.宽 &l ...
- Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)
一,问题 app自动化测试使用Android真机连接电脑时,通常会遇到两种情况: 1.测试机连接电脑会弹窗提示USB选项,选择USB用于"传输文件",有些手机不支持设置默认USB选 ...
- appium自动化测试之UIautomatorviewer元素定位
appium自动化测试之UIautomatorviewer元素定位 标签(空格分隔): uiautomatorviewer元素定位 前面的章节,已经总结了怎么搭建环境,怎样成功启动一个APP了,这里具 ...
- Appium移动端自动化:Appium-Desktp的使用以及定位元素方式总结
一.appium-desktop功能介绍 1.打开appium-desktop,点击start session 2.打开后,点击屏幕右上角的搜索按钮 3.然后会打开配置页面,在本地服务配置信息同上面写 ...
随机推荐
- ERP承接新后台优惠规则问题
一.后台在哪配置优惠规则? 1.设置优惠时间段: 2.添加优惠活动: 关于自动和手动: 自动:创建后,ERP同步数据后即生效. 点餐,活动会自动生效,自动计算金额. 手动:创建后,ERP需要手 ...
- ORACLE获取SQL绑定变量值的方法总结
本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅. 方法1:查询V$SQL V$SQL视图中 ...
- 多个iframe中根据src获取特定iframe并执行操作
多个iframe中根据src获取特定iframe并执行操作 前言:在项目中做一个批量编辑工单时需要在一大堆的iframe中的某一个iframe里边再用模态框的形式显示编辑区域,然后再在模态框里边加入i ...
- pom文件
groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找. groupId一般分为多个段 ...
- esxi网络中虚拟机的相关操作
一个虚拟机的克隆就是原始虚拟机全部状态的一个备份或镜像.克隆的过程不影响原始虚拟机.而快照指的是虚拟磁盘在某一特定时间点的副本.执行快照将保留虚拟机的状况和数据. 一.实验拓扑图: 目标:克隆虚拟机, ...
- LeetCode算法题-Convert a Number to Hexadecimal(Java实现)
这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...
- html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题
先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...
- input accept属性限制文件上传格式
上传文件的类型:具体做法如下所示: 注意:accept属性可以限制上传格式,其有兼容性如下 <1>上传.csv格式的 <input text="file" acc ...
- (转)Spring Boot (十):邮件服务
http://www.ityouknow.com/springboot/2017/05/06/spring-boot-mail.html Spring Boot 仍然在狂速发展,才几个多月没有关注,现 ...
- A - 畅通工程续 最短路
某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在 ...