appium的三种等待方式

本文介绍了PythonSelenium中三种等待策略:强制等待(time.sleep),全局隐式等待(driver.implicitly_wait)和显式等待(WebDriverWait),以及如何使用Lambda表达式来定义自定义等待条件。这些技巧有助于优化网页自动化测试的执行效率和准确性。
摘要由CSDN通过智能技术生成

1、强制等待

time.sleep(5)或者sleep(5)

等待固定的时间,才会继续执行下面的代码,影响脚本的运行速度。

2、隐式等待(全局隐式等待)

driver.implicitly_wait(5)

当元素可以被定位到,则继续执行;如果超过时长还没有定位到,则会抛出异常。

隐式等待是全局的,设置时间不宜过长。当元素处于不可交互的状态时就会触发隐式等待,多次设置的话后一次会覆盖前一次。

这种方法有个弊端,就是程序会一直等到整个页面加载完成才会继续执行下一步,比如某些时候想要的页面元素早就加载完了,但是由于个别JS等资源加载稍慢,此时程序仍然等待全部页面加载完成后才会继续执行下一步,无形中加长了测试用例的执行时间。

3、显式等待

是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在;

如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作;如果超过设置时间检测不到则抛出异常,默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

显示等待用到的两个类: WebDriverWaitexpected_conditions

WebDriverWait用法

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔步长,默认为0.5s
  • ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception

WebDriverWait的until()和until_not()方法:

  • method:在等待期间,每隔一段时间(init中的poll_frequency)调用这个传入的方法,直到返回值不是False
  • message:如果超时,抛出TimeoutException,将message传入异常
  • until_not:与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件则继续执行,参数也相同。

expected_conditions类

  • presence_of_element_located判断元素是否被加到了DOM树里,并不代表该元素一定可见、可点击的
  • 用法:WebDriverWait().until(expected_conditions.presence_of_element_located(元素))
  • visibility_of_element_located判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0
  • 用法:WebDriverWait().until(expected_conditions.visibility_of_element_located(元素定位)

使用lambda表达式

  • WebDriverWait(driver,time).until(lambda x:x.find_element_by_id("someId")
    返回一个元素

例子

lambda:

WebDriverWait(driver, 8).until(lambda x: x.find_element(By.XPATH, "//*[@text='账号密码登录']"))

expected_conditions:

locate=(By.XPATH, "//*[@text='手机号']")

WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located(locate))

WebDriverWait(driver,10).until(expected_conditions.presence_of_element_located(locate))

WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable(locate))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值