Appium/Selenium+Java的三种等待方式

参考:
java-selenium三种等待方式
Selenium+Java(六)Selenium 强制等待、显式等待、隐实等待


1. 强制等待

强制等待是利用time模块的sleep方法来实现,最简单粗暴的等待方法。

//强制等待1S
Thread.sleep(1000);
  • 缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间还没到,浪费时间),如果再用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率。

  • 优点:使用简单,可以在调试时使用。

2. 隐式等待

隐式等待只能作用于元素的等待。如果元素在指定的时间内找到,则不会继续等待,否则在指定时间内未找到元素则抛出NoSuchElementException。

作用域是全局的,跟driver的生命周期一样,一般定义在父类中,只要设置隐式等待后,页面所有的元素都会被绑定这种等待机制,只需设置一次,全局有效(只作用于元素),直到driver实例被关闭。

//隐式等待等待5秒
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  • 缺点:使用隐式等待,程序会一直等待页面加载完成,才会执行下一步操作(有时候页面想要的元素早已加载完成了,但是页面上个别元素还没有加载完成,仍要等待页面全部完成才能执行下一步,使用也不是很灵活)

  • 优点:隐式等待对整个driver的周期都起作用,所以只要设置一次即可

3. 显式等待

除了作用于元素等待还可以实现各种场景的等待,例如页面加载等。
智能的等待方式,元素在指定的时间内找到,则不会继续等待,否则抛出TimeOutException。
非全局设置,可以针对不同的元素绑定不同的等待机制。

只有满足显式等待的条件满足(这里是满足页面出现name=wd的元素),测试代码才会继续向后执行后续的测试逻辑,如果超过设定的最大显式等待时间阈值, 这测试程序会抛出异常。

//显式等待3秒
WebDriverWait wait = new WebDriverWait(driver, 3);
//3秒内找不到此元素,TimeOutException报错
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.name("wd")))
  • 缺点:使用相对比较复杂

  • 优点:判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率

附:ExpectedConditions其他用法

  1. titleIs判断当前页面的title是否等于预期。
  2. titleContains判断当前页面的title是否包含预期字符串。
  3. urlToBe判断当前页面的url是否等于预期。
  4. urlContains判断当前页面的url是否包含预期字符串。
  5. presenceOfElementLocated判断元素是否出现,出现就通过。
  6. visibilityOfElementLocated判断某个元素是否可见,可见代表元素非隐藏。
  7. elementToBeSelected页面元素处于被选中状态。

4. 隐式等待与显示等待结合使用

一般来说,在项目中会使用隐式等待与显式等待结合的方式,定义完 driver 之后立即设置一个隐式等待,在测试过程中需要判断某个元素属性的时候,再加上显式等待。

若隐式等待时间与显式等待时间不同,当隐式等待时间大于显式等待时间时,最终等待时间等于隐式等待时间;当显式等待时间大于隐式等待时间时,会循环隐式等待时间,最终等待时间大于等于显式等待时间。

详细说明:e.g.
隐式等待时间设置为10秒,A元素的显式等待时间设置为5秒,若没有定位到A元素时,会等待10秒。
隐式等待时间设置为3秒,A元素的显式等待时间设置为7秒,若没有定位到A元素时,会等待3+3+3=9秒。
隐式等待时间设置为9秒,A元素的显式等待时间设置为10秒,若没有定位到A元素时,会等待9+9=18秒。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吮指原味张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值