Appium+Python3+iOS定位元素

您所在的位置:网站首页 ios自动化测试元素定位 Appium+Python3+iOS定位元素

Appium+Python3+iOS定位元素

#Appium+Python3+iOS定位元素| 来源: 网络整理| 查看: 265

前言:

最近在做IOS自动化测试,IOS的Appium环境都配置OK,执行起来真的慢,慢到怀疑人生,那么今天就来总结一下IOS定位方式和各个定位方式的速度排序。

据我观察,按查找元素的顺序速度,从快到慢的顺序如下:

ios_predicate >> accessibility_id >> class_name >>xpath

注⚠️:(论坛比较多的说法是class_name>>accessibility_id,在这里我们姑且认为它们的速度是一样的。)

1、元素属性介绍

image.png

type:元素类型,与className作用一致,如:XCUIElementTypeButton value: 一般不用 name:元素的文本内容,可用作 AccessibilityId定位方式,如:ClearEmail label:绝大多数情况下,与 name 作用一致 enabled:元素是否可点击,一般值为true或者false visible;元素是否可见,一般值为true或者false

2、ios_predicate

在 iOS 的 UI 自动化中,使用原生支持的Predicate定位方式是最好,可支持元素的单个属性和多个属性定位,强烈推荐使用。 使用方法,举例如下:

driver.find_element_by_ios_predicate("value == 'ClearEmail'") driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")

1)比较运算符:>、=、100 或 value == 'ClearEmail' 或 value != 'ClearEmail'

driver.find_element_by_ios_predicate("value>100")

2)范围运算符:IN、BETWEEN 可用于数值和字符串的范围核对 如:value BETWEEN {1,6} 或 value IN {'Clear','Email'}

driver.find_element_by_ios_predicate("value BETWEEN {1,6}")

3)字符串相关:CONTAINS、BEGINSWITH、ENDSWITH 包含某个字符串,如:value CONTAINS 'Email' 以某个字符串开头,如:value BEGINSWITH 'Clear' 以某个字符串结束,如:value ENDSWITH '班级Email'

driver.find_element_by_ios_predicate("value CONTAINS 'Email'")

4)通配符: LIKE 其中:?代表一个字符,*代表多个字符 如:一个元素的value属性为ClearEmail: value LIKE 'Clear?mail' value LIKE 'Clear*' 以上这么多种文本都可以被识别为同一个元素。

driver.find_element_by_ios_predicate("value LIKE 'Clear*'")

5)正则表达式:MATCHES 如:一个元素的value属性为ClearEmail: value MATCHES '^C.+l$'

driver.find_element_by_ios_predicate("value MATCHES '^C.+l$'")

注⚠️:正则表达式详情可参考我的另一篇文章《Python-正则表达式》 6)两种及两种以上属性定位元素:AND 单个属性定位用符号AND连接起来即可,如下:

driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")

3、accessibility_id

替代以前的name定位方式,在 iOS 上,主要使用元素的label或name(两个属性的值都一样)属性进行定位,如该属性为空,也是不能使用该属性。 driver.find_element_by_accessibility_id('ClearEmail')

4、class_name

使用元素的type属性定位,特别注意该属性的唯一性!class_name唯一的情况并不多,一般情况下用不上。 driver.find_element_by_class_name('XCUIElementTypeButton')

5、xpath

由于 iOS 10开始使用的 XCUITest 框架原生不支持,定位速度很慢,所以官方现在不推荐大家使用,也有其他替代的定位方式可使用。 1)使用绝对路径定位: driver.find_element_by_xpath('/XCUIElementTypeApplication/XCUIElementTypeButton') 2)使用相对路径定位 driver.find_element_by_xpath('//XCUIElementTypeButton') 3)通过元素的索引定位 driver.find_element_by_xpath('//XCUIElementTypeButton[index]') 4.通过元素的属性定位 一种属性: driver.find_element_by_xpath("//className[@value='ClearEmail']") 两种属性: driver.find_element_by_xpath("//className[@value='ClearEmail'][@ visible =true]") 部分属性(最强大):driver.find_element_by_xpath("//className[contains(@value,'ClearEmail')]")

以上,对你有帮助的话,点赞❤️吧~~ 欢迎关注我的简书,博客,TesterHome,Github~~~

作者:搁浅 出处: http://www.cnblogs.com/xiaoxi-3-/ 如果对您有帮助,请关注我的同名简书:https://www.jianshu.com/u/da1677475c27 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3