软件测试 | 元素定位方式与隐式等待

518 篇文章 3 订阅
514 篇文章 2 订阅
文章介绍了在UI自动化测试中如何使用Appium进行页面元素定位,包括ID、accessibility_id、XPath等多种方式,并强调了隐式等待在元素查找中的作用,它在超时时长内智能地尝试查找元素,提高了测试效率。
摘要由CSDN通过智能技术生成

元素定位是UI自动化测试中最关键的一步,假如在自动化测试中没有定位到页面中的元素,也就无法完成对页面的测试操作。那么,我们在自动化测试中如何定位到想要的页面元素呢?下面介绍用Appium定位元素的方式。

1.Appium定位元素的方式

定位页面元素有很多种方式,例如,可以通过ID、accessibility_id、XPath等方式进行页面元素的定位,也可以使用Android和iOS提供的定位方式实现页面元素的定位,具体如表5-3所示。

定位方式描述
Accessibility ID识别一个UI元素,对于XCUITest引擎,它对应的属性名是’accessibility_id‘,对于Android系统的页面元素,它对应的属性名是’content-desc‘
Class name对于一个iOS系统,它的class属性对应的属性值会以’XCUIElementType‘开头,对于Android系统,它对应的是UiAutomator2的class属性(e.g.: android.widget.TextView)
ID原生元素的标识符,Android系统对应的属性名为’resource-id‘,ios为'name'
Name元素的名称
XPath使用XPath表达式查找页面所对应的XML的路径(不推荐,存在性能问题)
Image通过匹配base 64编码的图像文件定位元素
Android UiAutomator (UiAutomator2 only)通过UiAutomator提供的API,尤其是UiSelector类来定位,在Appium中,会将Java代码作为字符串发送到服务器,服务器在应用程序的环境中执行这段代码,并返回一个或多个元素
Android View Tag(Espresso only)使用view tag定位元素
Android Data Matcher(Espresso only)使用Espresso数据匹配器定位元素

2.隐式等待

隐式古代是一种全局等待方式。设置了隐式等待时长,实际上是对页面中的所有查找元素的方法设置了加载时长,如果查找时间超出了设置时间则抛出异常。

假如在测试脚本中设置了隐式等待时长为10秒,测试脚本会在10秒内不停地执行查找页面元素的操作,如果在第2秒就找到了需要的元素,就停止查找且继续执行后面的测试代码,如果查找时间超出了设置时间,则测试代码抛出异常。

一旦在测试代码中设置了隐式等待,则隐式等待就会存在整个WebDriver对象实例的声明周期中,例如,元素定位的测试代码每次调用find_element或者find_eleniumts方法是时候,就会自动茶法隐式等待。

测试的实践证明,隐式等待比强制等待更加只能,后者只能选择一个固定的时间等待,前者可以在一个时间范围内智能地等待。

隐式等待的演示代码如下(Python版和Java版)。

Python版本

...
self.driver = webdriver.Remote(server, desired_caps)
self.driver.implicitly_wait(15)
...

Java版本

...
driver = new Androidver(remoteUrl,desiredCapabilites);
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
...

执行上面的代码,会得到下面的日志信息(注意:下面的xx和xxy是元素ID属性的简写):

[W3C] Matched W3C error code 'no such element' to NoSuchElementError
[BaseDriver] Waited for 1495 ms so far
[WD Proxy] Matched '/element' to command name 'findElement'
……
[W3C] Matched W3C error code 'no such element' to NoSuchElementError
[BaseDriver] Waited for 2707 ms so far
[WD Proxy] Matched '/element' to command name 'findElement'
……
[HTTP] <-- POST /wd/hub/session/xx/element 200 6653 ms - 137
[HTTP]
[HTTP] --> POST /wd/hub/session/xx/element/xxy/click
[HTTP] {"id":"xxy"}

从上述日志上可以看出,我们使用Appium进行元素查找的时候,查找失败后程序不会直接抛出异常停止测试脚本执行,而是每过一段时间去查找一次元素。上面的例子所示,在6.7秒左右查到了元素,此时结束等待,去执行点击操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值