appium通过iOS的predicate的模糊或精确匹配使用-ios uiautomation方式寻找元素

来源:互联网 发布:淘宝足球鞋正品店铺 编辑:程序博客网 时间:2024/06/06 11:42

在做ios自动化测试项目过程中遇到测试运行非常缓慢,一直在考虑怎么优化下测试运行速度。经过不断的search和debug,发现还是使用ios的uiautomation的原生查找元素方法还是比较快的,后面把项目中用到xpath等查找方式都替换-ios uiautomation,测试运行速度大大提高。网上关于-ios uiautomation方式查找的资料挺少的,特地mark下,以免以后忘了。

一、predicate的基本语法:

(1)比较运算符>,<,==,>=,<=,!=
可用于数值及字符串
例:@"number > 100"

(2)范围运算符:IN、BETWEEN
例:@"number BETWEEN {1,5}"
@"address IN {'shanghai','beijing'}"

(3)字符串本身:SELF
例:@“SELF == ‘APPLE’"

(4)字符串相关:BEGINSWITH、ENDSWITH、CONTAINS
例:@"name CONTAIN[cd] 'ang'" //包含某个字符串
@"name BEGINSWITH[c] 'sh'" //以某个字符串开头
@"name ENDSWITH[d] 'ang'" //以某个字符串结束
注:[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,也不区分发音符号。

(5)通配符:LIKE
例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].
@"name LIKE[cd] '???er*'"

(6)正则表达式:MATCHES
例:NSString *regex = @"^A.+e$"; //以A开头,e结尾
@"name MATCHES %@",regex

二、应用


我们要找到上图中“周一001”名称的元素用-ios uiautomation方式该怎么找呢?我们以python为例的多种方法去查找

1、精确查找 .tableViews()[0].cells()[0].staticTexts()[5]

2、用withpredicate精确查找 .tableViews()[0].cells()[0].staticTexts().withPredicate("name == '周一001'")

3、用withpredicate模糊查找 .tableViews()[0].cells()[0].staticTexts().withPredicate("name CONTAINS  '周一'")

4、用withpredicate模糊查找 .tableViews()[0].cells()[0].staticTexts().withPredicate("name BEGINSWITH  '周'")

5、用withpredicate模糊查找 .tableViews()[0].cells()[0].staticTexts().withPredicate("name LIKE  '周*'")

…………

使用firstWithPredicate和withPredicate关键字可以模糊匹配到元素,完全可以替代xpath慢查找的方式。


参考资料:http://appium.io/slate/en/master/?python#ios-predicate

https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/UIAutomationRef/


0 0
原创粉丝点击