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.然后会打开配置页面,在本地服务配置信息同上面写 ...
随机推荐
- oracle中print_table存储过程介绍
一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面.但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_t ...
- [20190212]删除tab$记录的恢复3.txt
[20190212]删除tab$记录的恢复3.txt --//春节前几天做了删除tan$记录的测试,链接:http://blog.itpub.net/267265/viewspace-2565245/ ...
- Spring MVC 拦截器 (十)
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) <!--json-->& ...
- shell编程 学好内功(一)
shell 背景 什么是shell编程 高大上的解释,往往让人摸不住头脑.一句话概括就是:shell编程就是对一堆Linux命令的逻辑化处理. 为什么要会shell编程 举个简单的例子,我们做java ...
- SQL Server的实例恢复解析
同Oracle一样,SQL Server在非一致性关闭的时候也会进行实例恢复(Instance Recovery),本文根据stack overflow的文章介绍一些SQL Server实例恢复的知识 ...
- 转:Log Explorer使用说明恢复被误删除的数据
一.介绍 Log Explorer主要用于对MSSQLServer的事物分析和数据恢复.你可以浏览日志.导出数据.恢复被修改或者删除的数据(包括执行过update,delete,drop和trunca ...
- phpstorm设置背景图片
对于这个问题,其实很简单,连续按两下shift键或者是Ctrl+Shift+A键即可.出来的界面如下: 输入set Background Image命令,出现的界面如下: 然后选择图片, 点击ok,即 ...
- js模块化规范—概念和模块化进化史以及模块化的问题
模块的概念 一个复杂的项目开发中,会写很多js文件,一个js文件执行某些特定的功能,那么每个js都可以称为一个模块,这就是模块的概念 每个js模块内部数据/实现是私有的, 只是向外部暴露一些接口(方法 ...
- 数位dp D - Count The Bits
题目:D - Count The Bits 博客 #include <cstdio> #include <cstring> #include <cstdlib> # ...
- centos6.5下配置django+uwsgi+nginx
https://blog.csdn.net/huanbia/article/details/54630180