在iOS APP自动化测试中,最基本的操作就是元素定位了。与Android APP自动化测试一样,iOS也支持 ( XCUITest 或 UIAutomation测试框架) 使用属性值定位,比如id、className等元素属性,然而,有时候属性值并不是唯一的,appium、facebook-wda等框架也封装了XPath定位方法,使用XPath和属性值定位方法基本可以定位到99%的元素。但是在性能方面,XPath的定位速度相对较慢,我们可以选择iOS特有的定位策略: predicate 和 class chain定位方法。本文介绍predicate定位方法, class chain定位将在下一篇文章中介绍。
Predicate语法
Predicate定位是iOS原生支持的定位方式,定位速度比较快,它可以通过使用多个匹配条件来准确定位某一个或某一组元素。
基本比较
符号 | 说明 | 示例 |
---|---|---|
= , == |
等于 | name == “通知” |
> |
大于 | name > 10 |
< |
小于 | name < 10 |
>= , => |
大于等于 | name >= 10 |
<= , =< |
小于等于 | name <= 10 |
!= , <> |
不等于 | name != “通知” |
集合操作
符号 | 说明 | 示例 |
---|---|---|
ANY , SOME |
满足表达式的任意元素 | ANY children.age < 18 |
ALL |
满足表达式的所有元素 | ALL children.age < 18 |
NONE |
不包含满足表达式的任意元素 | NONE children.age < 18 |
IN |
元素在集合中 | name IN { ‘Ben’, ‘Melissa’, ‘Nick’ } |
BETWEEN |
位于某个范围 | 1 BETWEEN { 0 , 33 } |
array[index] | 数组array中指定索引的元素 | |
array[FIRST] |
数组中的第一个元素 | |
array[LAST] |
数组中的最后一个元素 | |
array[SIZE] |
指定数组大小 |
布尔值
符号 | 说明 | 示例 |
---|---|---|
TRUEPREDICATE |
TRUE | |
FALSEPREDICATE |
FALSE |
逻辑运算符
符号 | 说明 | 示例 | ||
---|---|---|---|---|
AND , && |
逻辑与 | name="通知" AND label="通知" |
||
OR , ` |
` | 逻辑或 | ||
NOT , ! |
逻辑非 |
字符串比较
关键字 | 说明 | 示例 |
---|---|---|
BEGINSWITH |
以某个字符串开始 | name BEGINSWITH "屏幕" |
ENDSWITH |
以某个字符串结束 | name ENDSWITH "时间" |
CONTAINS |
包含 | name CONTAINS "使用时间" |
LIKE |
通配符 | name LIKE '*Total: $*' |
MATCHES |
正则匹配 | value MATCHES '.*of 7' |
默认情况下,字符串比较是大小写和变音敏感的,可以在关键字后面加上[cd]
,[c]
不区分大小写,[d]
表示不区分变音符号。
变音符号是附加在字母上的符号,用于提示发音或区分相似的单词。很多语言使用变音符,比如法语、西班牙语等。比如法语单词:Pêche 桃子
Predicate定位示例
使用facebook-wda进行元素操作示例:
1 | s = c.session('com.apple.Preferences') # 打开设置 |
参考文档:
- http://appium.io/docs/cn/writing-running-appium/ios/ios-predicate/
- https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html
本文标题:iOS APP自动化:predicate定位
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/app-testing-for-ios-location-with-predicate-locator/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。