appium4 元素定位

在没有重新安装系统以前我用的appium1.4.X,现在用了1.5.3,我把在1.4.X上运行成功的用例在1.5.3上运行。结果报错。说find_element_by_name 已经不支持了。

马上百度,网上的确说appium已经把这个借口给关闭了。然后只能只能用xpath去定为,效果不是很好,网上查询了下资料,因为appium是去打开instruments,所以提供了一个元素的定位方式是find_element_by_i0s_uiautomation。这个定位方式会很快的去定位元素,相对比xpath 快速有效。

但是定位的规则是什么呢?开始的时候我查看了网上别人贴出来的资料和经验。但是还是不知道怎么去定位,因为定位的命名不知道怎么去写。

大家如果熟悉instruments中的automation的话,那么这个就很简单了。如果不会,建议去学一下,估计10分钟就能录制脚本,我们只需要拿到元素定位的信息就可以了。脚本是否能跑起来就不去关心了。

比如xpath中

//UIATableView/UIATableCell/UIAStaticText

在i0s_uiautomation中

.tableViews()[0].cells()[0].staticTexts()[0]

.tableViews().firstWithPredicate("value like 'rows 1 to 2 of 7'").cells()["精选"].buttons()["查询更多"]

上面两种写法定位到的元素是一样的,但是因为用了匹配查找,就算将来位置又变动,也可能用匹配查找定位到,用过xpath定位的知道写死的定位,只要稍有调整,脚本需要全部重新写,那种工作量可大可小,但是总的来说没有利。


automation也提供了一种查询方式就是语法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


总结xpath 和 i0s_uiautomation之间的对照。

1.UIATableView : tableViews()

2.UIATableCell :cells()

3.UIAStaticText : staticTexts()

4.UIAButton : buttons()

5. :textFields()

6.:alert()

7.:switches()

8.:sliders()


10 月25日

今天第一次在实战中用predicate,以为很简单,其实还是遇上一个坑。

用automation 拿到了定位语句 

.staticTexts().firstWithPredicate("value like '登录后,马上添加感兴趣的栏目到这里'")


按照平时的写法应该是

elem = driver.find_element_by_os_uiautomation(".staticTexts().firstWithPredicate("value like '登录后,马上添加感兴趣的栏目到这里'")")


由于python的语法,不认识“”中再使用“”

经过一阵调试后才跑通了,请看下面我写的列子

elem = driver.find_element_by_ios_uiautomation(".staticTexts().firstWithPredicate("+'"'+"value BEGINSWITH '登录后'"+'"'+")")
是使用+ 把“拼接到定位语句中的。

另外这里用到了 beginswith 因为我怕以后万一这里显示的提示文字需要修改,但是前面几个字修改的可能很小,于是就用模糊匹配进行查找。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值