在iOS APP自动化:predicate定位中介绍了iOS APP的predicate定位方法,本文介绍与XPath语法比较类似的class chain定位方法。
class chain 定位
class chain 定位方法由mykola-mokhnach开发,和XPath比较类似,可以实现分层查询,但它的查询性能更高,通过将class chain查询映射到一系列的XCUITest调用中,仅查找子节点,不像XPath那样递归地查询整个UI树。
class chain 支持Predicate字符串匹配,下面介绍class chain 定位方法。
儿子节点搜索
选择儿子元素,类似于XPath语法中的反斜杠/
。
1 | XCUIElementTypeWindow[`label BEGINSWITH "text"`][-1] # 选择label以foo开头的最后一个 |
子孙节点搜索
类似于XPath语法中的双反斜杠//
1 | **/XCUIElementTypeCell[`name BEGINSWITH "A"`][-1]/XCUIElementTypeButton[10] # 选择name以A开头的最后一个Cell元素的第10个子元素 |
使用class chain定位是需要注意以下几点:
- Predicate字符串要写到中括号中,并且使用反引号包裹。
- Predicate表达式应该写在索引前面
class chain定位示例
使用facebook-wda进行元素点击操作:
1 | s = c.session('com.apple.Preferences') # 打开设置 |
上面的定位语句也可以使用XPath语法,对应如下:1
2
3
4s(xpath='//XCUIElementTypeWindow//XCUIElementTypeCell[starts-with(@label,"屏幕")]').click()
s(xpath='//XCUIElementTypeCell[starts-with(@label,"屏幕")]').click()
s(xpath='//XCUIElementTypeTable/*[@name="通知"]').click()
s(xpath='//XCUIElementTypeCell[7]').click()
XPath定位效率比class chain低,建议使用class chain来进行定位。
参考文档:
本文标题:iOS APP自动化:class chain定位方法
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/app-testing-for-ios-location-with-classChain/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。