自动化测试-三种等待的使用方式 (强制等待,显示等待,隐式等待)

文章目录

  • [1. 强制等待](#1. 强制等待)
  • [2. 隐式等待](#2. 隐式等待)
  • [3. 显示等待](#3. 显示等待)
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

1. 强制等待

使用方法:

java 复制代码
Thread.sleep(3000);(单位是毫秒)

1)解决什么问题:在报错的元素操作之前添加等待

2)原理:强制线程等待,线程休眠一定时间

3)来源:Thread类中的静态方法,需要处理 InterruptedException

4)使用场景适合:调试时使用,临时性添加;代码部署环境时避免或者减少使用

java 复制代码
    @Test
    public void waitImplicitlyWait() throws InterruptedException {
        webDriver.get("https://www.baidu.com/");
        Thread.sleep(3000);
        webDriver.findElement(By.xpath("//*[text()='个人中心']"));
    }

2. 隐式等待

使用方法:

java 复制代码
  webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));

1)解决什么问题:难以确定元素加载的具体等待时间,针对于寻找元素的这个动作,使用隐式等待添加配置。

2)原理:在设置的等待时间内,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常,

3)来源:包:org.openqa.selenium

类结构:

=》WebDriver.Options 接口(通过 manage() 获取)

=》WebDriver.Timeouts 接口(通过 timeouts() 获取)

=》方法:implicitlyWait(Duration duration)

4)使用场景:难以确定元素加载的具体等待时间

5)特点:是全局等待,设置一个隐式等待会在全局等待,查看元素是否出现;能够查看全局dom元素;

6)缺点:元素可以找到,使用点击等页面交互操作,出现报错

原因:

1.页面元素加载是异步加载过程,通常html会先加载完成,js、css其后

2.元素存在与否是由HTML决定,元素的交互是由css或者js决定

3.隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的页面交互操作

4.解决方案:使用显式等待

java 复制代码
 @Test
    public void waitImplicitlyWait() throws InterruptedException {
        webDriver.get("https://www.baidu.com/");
        webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        webDriver.findElement(
            By.xpath("//*[@id=\"inspire\"]/div/nav/div[1]/div/div/div[8]/div/div[2]/div"));
    }

3. 显示等待

使用方法:WebDriverWait(driver实例, 最长等待时间).until(结束条件);

java 复制代码
 WebElement element = new WebDriverWait(webDriver, Duration.ofSeconds(10))
                .until(ExpectedConditions.elementToBeClickable(
                        By.cssSelector("#success_btn")
                ));

1)解决什么问题:解决与页面元素交互操作,如:点击,输入等

2)原理:在最长等待时间内,是否满足结束条件;设定特定的等待条件,轮询等待操作,两者满足其一,显示等待就结束了;

3)来源:包:org.openqa.selenium.support.ui

核心类:

WebDriverWait - 显式等待的主要类 - 继承自 FluentWait< WebDriver >

ExpectedConditions - 预定义等待条件的工厂类

包含各种静态方法返回 ExpectedCondition 对象

Wait 接口 - 等待机制的基础接口

FluentWait 类 - 提供流畅API的等待实现

4)使用场景适合:解决特定条件下的等待问题,比如点击等交互性行为

java 复制代码
@Test
    public void waitWebDriverWait() {
        //进入页面,点击消息提醒按钮
        webDriver.get("www.baidu.com");
        WebElement element = new WebDriverWait(webDriver, Duration.ofSeconds(10))
                .until(ExpectedConditions.elementToBeClickable(
                        By.id("success_btn");
                ));
        element.click();
    }

【注】

1)优先使用显式等待:WebDriverWait + ExpectedConditions

2)辅助使用隐式等待:设置全局基础超时

3)避免使用强制等待:Thread.sleep() 应作为最后手段

4)Java 8+:使用 Duration 类而不是具体的秒数值

总结

✨✨✨各位读友,本篇分享到内容是否更好的让你理解了显示等待和隐式等待使用,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
乐橙开放平台2 分钟前
跨地域监控难管理?通过 GB28181 把各地海康大华乐橙摄像头注册到云端平台
开发语言·笔记·物联网·自动化·php·音视频·智能家居
Canmag 兴隆磁性21 分钟前
钕铁硼磁片取向方向检测自动化方案:从人工目检到流水线在线分选的工程实践
运维·数据库·自动化·工业自动化·钕铁硼·自动化检测·磁材料
乐橙开放平台1 小时前
离岗检测怎么实现?通过客流相机或 AI 摄像头识别岗位区域无人状态,再推送告警消息
人工智能·笔记·后端·数码相机·物联网·自动化·音视频
女神下凡3 小时前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范
海宇AI10 小时前
零信任架构实战:基于海宇个人风险报告构建自动化分期商城信用额度初审网关
运维·人工智能·架构·自动化
QXWZ_IA14 小时前
公路边坡裂缝的自动化监测布设
大数据·人工智能·自动化
码林拾遗WJ17 小时前
告警分级的自动化实测:模型判断 vs 人工拍板
人工智能·算法·自动化
VisionDataLab18 小时前
机器视觉运维困局:人员高频流动,如何降低产线视觉系统的运维依赖
自动化·视觉检测
第九序言T19 小时前
Python 数据处理进阶(二十四)把脚本变成工具:argparse、logging 与定时任务
python·自动化·pandas
小豆庄1 天前
会议录屏忘打码后的技术复盘:本地自动化隐私脱敏方案
运维·opencv·目标检测·自动化·视频·纹理贴图