关于appium:iOS-定位方式-iOSNsPredicateString-详解

37次阅读

共计 1564 个字符,预计需要花费 4 分钟才能阅读完成。

前言

因为应用 idclassNameAccessibilityId 定位形式较为简单,少数状况下,在同一个页面,都不是惟一存在的,不能辨认一个元素。而 xpath定位形式在 xcui 底层原生不反对,由 appium 额定反对的,定位速度很慢,而且有时候定位不到元素的状况存在。综上所述,在 iOS 的 UI 自动化中,应用原生反对的 iOSNsPredicateString 定位形式是最好,反对也是最好的。

定位形式

仅反对 iOS 10 或以上(底层须要应用 XCUITest 框架),可反对元素的单个属性和多个属性定位,举荐应用。一个元素有这些属性:typevaluenamelabelenabledvisible,有些元素的属性只有以上的局部属性,如下图所示,可依据这些属性进行元素定位。

元素属性的介绍

type: 元素类型,与 className 作用统一,如:XCUIElementTypeStaticText
value: 个别不必
name: 元素的文本内容,可用作 AccessibilityId 定位形式,如:测试 420 班级群
label: 绝大多数状况下,与 name 作用统一
enabled: 元素是否可点击,个别值为true 或者 false
visible: 元素是够可见,个别值为true 或者false

定位形式

元素的定位形式都是一个 属性 + 运算符 + 值 模式存在

  1. 比拟运算符:>,<,==,>=,<=,!=
    可用于数值和字符串的比拟,
    如:name>100name == '测试'
  2. 范畴运算符:IN,BETWEEN
    可用于数值和字符串的范畴核查
    如:name BETWEEN {3,10}name IN {'Alan','May'}
  3. 字符串相干:CONTAINSBEGINSWITHENDSWITH
    蕴含某个字符串,如:label CONTAINS '测试'
    以某个字符串结尾,如:label BEGINSWITH '420'
    以某个字符串完结,如:label ENDSWITH '班级群'
    PS:在三个关键字后加上 不辨别大小写,可用于字母的校验;[d]不辨别发音符号,即没有重音符号 ($、#、% 等);[cd] 即不辨别大小写,也不辨别发音符号,如:

    name CONTAINS ABcd
    name CONTAINS abcd
    name CONTAINS ABCD
    # 1 和 3、2 和 3,的定位都是等同的,留神前面两个没带 `` 的不相等
  4. 通配符: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* 试 * 群'

    以上这么多种文本都能够被辨认为同一个元素。

  5. 正则表达式:MATCHES
    如:以 4 结尾,以 完结,

    label MATCHES '^4.+ 群 $'

    PS:具体正则表达式语法,请百度一下,你就晓得

以一种属性定位元素

能够用元素的属性:typevaluenamelabelenabledvisible,进行定位:

type == XCUIElementTypeStaticText,
label CONTAINS '测试'
label LIKE '* 试班级群'
enabled == true
visible == false

以两种或两种以上属性定位元素

就是以上单个属性定位用符号 AND 连接起来即可。如:

type == XCUIElementTypeStaticText AND label CONTAINS ' 测试
type == XCUIElementTypeStaticText AND label CONTAINS '测试' AND enabled == true

正文完
 0