【Selenium】一篇说清楚三大等待❗️硬等待 隐式等待 显示等待

本文介绍了在Web自动化测试中,硬性等待、隐式等待和显式等待的区别与应用场景。硬性等待可能导致时间浪费;隐式等待全局生效但不灵活;显式等待则允许针对特定元素定制等待条件,是推荐的解决方案。
摘要由CSDN通过智能技术生成

1、硬性等待

Thread.sleep(long millis); 硬性等待(强行等待,等待时间过长)sleep(毫秒)

  • 优点:使用简单

  • 缺点:容易造成时间浪费

  • 使用场景:有的浏览器只能用硬性等待,或者有点场景显示/隐式等待都不行

2、隐式等待

在设置的超时时间范围内不断查找元素,直到 找到元素(元素存在)或者超时为止

全局的,就是设置了隐式等待后,每一条查找语句都要去隐式等待

如:设置等待时间为5秒,在第3秒找到元素,不再继续等待

  • 特点:全局,去当前网页的源码html中找,找到了该元素就不等待,一般等待一些常见的元素

  • 设置方式:driver.manage.timeouts().implicitlyWait(long time, TimeUnit unit);

long time:等待时长数字, TimeUnit unit:等待时长单位

 //设置等待时间为5秒  
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  • 优点:相对灵活

  • 缺点:设置是针对全局的,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待

⚠️只能等待元素存在,不能适用条件更复杂的情况,如:元素可点击、元素可见才能操作,但是隐式等待是查元素是否在html源码存在,存在不一定可点击

思考场景:

比如一个弹窗的关闭按钮❌,页面缩放的时候看不到❌也不能点击,但是这时候html源码中是存在的,如果用隐式等待 能找到,但是实际执行点击操作却不行;

因为从html找到该元素,并不一定能点击,能可见,这时候需要 显式等待⬇️

3、显式等待

显式等待通常是我们自定义的一段代码,用来等待某个条件发生后再继续执行后续代码(如元素存在、元素可点击、元素可见等)

  • 特点:针对每一个元素可以设置不同的等待时间和等待条件,如果超时就报错

  • 使用方式:

WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectCondition.方法(元素路径));
WebDriverWait(driver,5)------表示:等待5秒,还有第三个参数,不传的话默认500毫秒,即:每0.5秒轮训查找一次
  • 优点:

每隔一段时间扫描一次页面,检查元素是否满足等待结果条件,比如查找元素,则检查元素是否存在,不存在则继续等待,直到找到或超时。

该方式不是全局设置,因此特定需要等待的元素可以这样处理,推荐优先使用这一种方法。

方法等待条件
presenceOfElementLocated❗️和隐式等待效果一样,是否在源码中存在页面元素在页面中存在
visibilityOfElementLocated页面元素在页面存在并且可见
elementToBeClickable页面元素是否在页面上可被单击
urlContains("url"))等待url是否包含,返回boolean

举例: 

WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable
        (By.xpath("//span[@class='layui-layer-setwin']//a")));
element.click();

⚠️ 元素是否可见和元素是否可点击是不一样的

不可见一定不可点击,可见不一定可点击(比如有可能被弹窗盖住了...),可点击一定可见

存在不一定可见,可见一定存在

android的toast,就是存在但是不可见:presenceOfElementLocated定位到,visibilityOfElementLocated定位不到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨撕酒家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值