当前位置: 首页 > backend >正文

自动化测试的三种等待方式

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 

自动化测试的等待方式主要有三种:强制等待、隐式等待和显式等待。

1. 强制等待(Sleep)

通过在代码中使用Thread.sleep()方法来实现的,该方法会阻塞当前线程的执行,程序会暂停指定的时间。

这种方式没有条件判断,只是简单地等待固定的时间。

2. 隐式等待(Implicit Wait)

通过设置浏览器驱动的全局等待时间来实现的。当查找元素时,如果元素没有立即出现,驱动会等待指定的时间,然后再继续执行。

这种方式会在查找元素时自动等待一段时间,如果元素在指定时间内出现了,就会立即执行后续操作。

如果超过了指定时间,就会抛出找不到元素的异常。

3. 显式等待(Explicit Wait)

显式等待是通过在代码中设置等待条件来实现的。在使用显式等待时,可以指定等待的最长时间和轮询间隔,并设置等待的条件。

驱动会在等待的过程中不断地检查条件是否满足,如果满足就会立即执行后续操作,如果超过了指定的最长时间仍然不满足条件,就会抛出超时异常。

三种等待方式的区别

1. 使用方式

强制等待是通过在代码中添加固定的等待时间来实现的,而隐式等待和显式等待是在初始化浏览器驱动时设置的等待时间或在代码中设置等待条件来实现的。

2. 等待条件

强制等待没有条件判断,只是简单地等待固定的时间。隐式等待通过判断元素是否出现来决定是否继续执行,而显式等待通过设置等待条件的满足与否来决定是否继续执行。

3. 灵活性

强制等待是固定时间的等待,不够灵活,不推荐广泛使用。

隐式等待是全局等待,适用于整个测试过程中都需要等待元素出现的情况。

显式等待更加灵活,可以根据不同的情况设置不同的等待条件,可以等待元素可见、可点击等等。

4. 等待时间

强制等待的等待时间是固定的,不会根据实际情况变化。

隐式等待和显式等待的等待时间可以设置,并且可以根据实际情况进行调整。

5. 异常处理

强制等待不会抛出任何异常。隐式等待在等待超时时会抛出找不到元素的异常。显式等待在等待超时或条件不满足时会抛出超时异常。

适用场景

1. 强制等待适用于简单的场景,或者在特定情况下需要固定的等待时间的场景

例如,在执行某个操作后,需要给系统一定的响应时间来稳定运行。

2. 隐式等待适用于整个测试过程中需要等待元素出现的场景

在初始化浏览器驱动时设置一个全局的等待时间,减少在每个元素查找操作前都需要手动添加等待时间的工作量。

适合网页加载时间不确定,但元素总体上可预期相对稳定的场景。

3. 显式等待适用于更复杂的场景,需要根据不同的条件来等待元素出现或满足特定的条件

通过设置等待条件和超时时间,可以在特定条件满足之前等待,或在超过指定时间后抛出异常。

适合需要等待特定元素状态变化,比如元素可点击、可见等情况。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

http://www.xdnf.cn/news/2713.html

相关文章:

  • 算法笔记.染色法判断二分图
  • mitt 事件发布-订阅库在 react 中的使用
  • 简单理解https与http
  • 邮件分类特征维度实验分析
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • 快乐数(双指针解法)
  • 1.57g 五一优选 = 雨晨 26100.3915 Windows 11 IoT 企业版 LTSC 2025 极速版(轻)
  • Flutter 学习之旅 之 flutter 作为 module ,在 Android 的界面中嵌入Flutter界面功能的简单整理
  • 【JAVAFX】controller中反射调用@FXML的点击事件失败
  • el-table 自定义列、自定义数据
  • 【学习笔记】RL4LLM(三)
  • 【设计模式】GOF概括
  • 拖动banner图,解决点击冲突问题
  • web3.js 和 ethers.js 的核心区别
  • c++11: 类型转换
  • dummy cli-tool ubuntu22.04使用
  • 在 Git 中,撤销(回退)merge 操作有多种方法
  • terraform 动态块(Dynamic Blocks)详解与实践
  • [Python开发] 如何用 VSCode 编写和管理 Python 项目(从 PyCharm 转向)
  • Java面试:Spring及Spring Cloud技术深度剖析
  • docker安装部署TDengine实现主从复制
  • 雷池WAF的身份认证 - GitHub
  • <uniapp><插件><UTS>在uniapp中,创建自己的插件并发布到uni插件市场
  • JavaScript-基础语法
  • 「Mac畅玩AIGC与多模态05」部署篇03 - 在 Mac 上部署本地向量化模型(Embedding Models)
  • 在QGraphicsView中精确地以鼠标为锚缩放图片
  • 迈瑞医疗一季度业绩环比大幅改善 国内业务将从今年三季度迎来重大拐点
  • 用Java模拟打字:深入解析 java.awt.Robot 的键盘控制艺术
  • 【Robocorp实战指南】Python驱动的开源RPA框架
  • 【Vue3-Bug】中路由加载页面直接显示空白