前言
因为应用id
、className
、AccessibilityId
定位形式较为简单,少数状况下,在同一个页面,都不是惟一存在的,不能辨认一个元素。而 xpath
定位形式在 xcui 底层原生不反对,由 appium 额定反对的,定位速度很慢,而且有时候定位不到元素的状况存在。综上所述,在 iOS 的 UI 自动化中,应用原生反对的iOSNsPredicateString
定位形式是最好,反对也是最好的。
定位形式
仅反对 iOS 10或以上(底层须要应用 XCUITest 框架),可反对元素的单个属性和多个属性定位,举荐应用。一个元素有这些属性:type
、value
、name
、label
、enabled
、visible
,有些元素的属性只有以上的局部属性,如下图所示,可依据这些属性进行元素定位。
元素属性的介绍
type
:元素类型,与className
作用统一,如:XCUIElementTypeStaticText
value
: 个别不必name
:元素的文本内容,可用作 AccessibilityId
定位形式,如:测试420班级群
label
:绝大多数状况下,与 name 作用统一enabled
:元素是否可点击,个别值为true
或者false
visible
:元素是够可见,个别值为true
或者false
定位形式
元素的定位形式都是一个属性+运算符+值
模式存在
- 比拟运算符:
>,<,==,>=,<=,!=
可用于数值和字符串的比拟,
如:name>100
或name == '测试'
- 范畴运算符:
IN
,BETWEEN
可用于数值和字符串的范畴核查
如:name BETWEEN {3,10}
,name IN {'Alan','May'}
字符串相干:
CONTAINS
、BEGINSWITH
、ENDSWITH
蕴含某个字符串,如:label CONTAINS '测试'
以某个字符串结尾,如:label BEGINSWITH '420'
以某个字符串完结,如:label ENDSWITH '班级群'
PS:在三个关键字后加上[c]
不辨别大小写,可用于字母的校验;[d]
不辨别发音符号,即没有重音符号($、#、%等);[cd]
即不辨别大小写,也不辨别发音符号,如:name CONTAINS[c] ABcdname CONTAINS abcdname CONTAINS ABCD# 1和3、2和3,的定位都是等同的,留神前面两个没带`[c]`的不相等
通配符:
LIKE
通配符也承受[cd]
,?
代表一个字符,*
代表多个字符
如:一个元素的label
属性为label LIKE '420测试班级群'label LIKE '420测?班级群'label LIKE '420??班级群'label LIKE '42?测试班?群'label LIKE '*试班级群'label LIKE '420测试班*'label LIKE '42*级群'label LIKE '4*试*群'
以上这么多种文本都能够被辨认为同一个元素。
正则表达式:
MATCHES
如:以4
结尾,以群
完结,label MATCHES '^4.+群$'
PS:具体正则表达式语法,请百度一下,你就晓得
以一种属性定位元素
能够用元素的属性:type
、value
、name
、label
、enabled
、visible
,进行定位:
type == XCUIElementTypeStaticText,label CONTAINS '测试'label LIKE '*试班级群'enabled == truevisible == false
以两种或两种以上属性定位元素
就是以上单个属性定位用符号AND
连接起来即可。如:
type == XCUIElementTypeStaticText AND label CONTAINS '测试type == XCUIElementTypeStaticText AND label CONTAINS '测试' AND enabled == true