news 2026/6/15 19:10:24

自动化测试之等待方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动化测试之等待方式

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

在自动化测试中,等待是一个重要的技术,用于处理页面加载、元素定位、元素状态改变等延迟问题。

等待能够确保在条件满足后再进行后续操作,提高自动化测试的稳定性以及可靠性。

等待方式:显示等待、隐式等待、线程睡眠

1. 显式等待(Explicit Wait)

一种在自动化测试中使用的等待方式,它的特点是在代码中明确地指定一个特定的条件,等待直到条件满足后再继续执行后续代码。

显式等待通常用于等待特定的条件发生,比如等待元素可见、可点击、存在等。

通过显示等待,可以解决页面加载或元素定位的延迟问题,确保在条件满足后再进行后续操作,避免不必要的等待时间。

在使用显示等待时,需要结合Selenium的WebDriverWait和expected_conditions模块来实现。

WebDriverWait负责等待的设置,expected_conditions模块提供了一系列常用的条件,可以根据具体的需求选择合适的条件。

等待步骤:

1)初始化WebDriverWait对象,指定等待时间和浏览器驱动。

2)调用until方法,传入要等待的条件。

3)在until方法中,会不断地轮询条件是否满足,直到条件满足或超时时间到达。

4)如果条件满足,继续执行后续代码。

5)如果超过超时时间后仍未满足条件,则抛出TimeoutException异常。

在每次轮询中,显示等待会等待一小段时间,然后再次检查条件是否满足。

这个小段时间是通过指定的等待时间和轮询间隔来控制的,条件满足,则立即继续执行后续代码;如果条件不满足,则继续等待。

代码实例:

2. 隐式等待(Implicit Wait)

自动化测试中使用的等待方式,特点是在代码中设置一个等待时间,如果在指定的时间内找到了元素,则继续执行后续代码。超过了指定的时间仍未找到元素,则抛出异常。

在设置隐式等待后,在代码中使用了元素定位的方法,如find_element_by_xpath、find_element_by_id等,会在指定的等待时间内等待元素出现。

在执行每个元素定位操作之前,先等待一段时间,等待的时间由设置的等待时间决定。

这个等待时间是一个全局性的设置,对整个代码执行过程中的所有元素定位都生效。

代码实例:

隐式等待可能会导致等待时间过长或过短的情况,设置的等待时间过长,则会增加测试时间。

设置的等待时间过短,会导致找不到元素而抛出异常。

在使用隐式等待时需要根据具体的需求和网页加载速度来合理设置等待时间。

3. 线程睡眠(Thread.sleep)

在代码中使用Thread.sleep()方法,暂停执行一段时间。

这种等待方式是固定的,不管条件是否满足都会等待指定的时间。

代码实例:

线程睡眠可以实现等待的效果,但不太推荐在自动化测试中大量使用它,因为线程睡眠是一个固定的等待时间,无法灵活地根据条件来进行等待。

如果条件提前满足,线程仍然会暂停执行指定的时间,导致测试效率低下和不稳定。

相比于线程睡眠,使用显示等待或隐式等待等更灵活的等待方式更加推荐。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 18:07:57

零基础入门UDS 31服务安全访问机制

从“UDS31”到真实安全机制:一文讲透汽车ECU的钥匙门你有没有遇到过这样的场景?在调试一辆新能源车的BMS(电池管理系统)时,想读取一些加密参数,结果发送2E写数据或22读DID请求,ECU却只回了个7F …

作者头像 李华
网站建设 2026/6/14 23:43:29

零基础掌握AUTOSAR诊断协议栈(UDS over CAN)

零基础吃透AUTOSAR诊断协议栈:从UDS到CAN,拆解整车刷写与故障读取的底层逻辑 你有没有遇到过这样的场景? 产线上的ECU突然无法刷写,诊断仪反复提示“安全访问拒绝”; 售后反馈某车型OBD灯常亮,但用标准工…

作者头像 李华
网站建设 2026/6/15 16:01:34

实战案例:基于车载雷达模块的CANFD与CAN对比

实战案例:车载毫米波雷达通信,为什么CANFD正在取代传统CAN?在一辆智能汽车的“神经系统”中,传感器是感知世界的“眼睛”和“耳朵”,而通信总线就是传递信息的“神经纤维”。当77GHz毫米波雷达每秒输出数百个目标点时&…

作者头像 李华
网站建设 2026/6/15 18:24:13

CUDA 11.0 共享库缺失:环境配置实战案例解析

CUDA 11.0 共享库缺失实战排错:从 ImportError 到 GPU 可用的完整路径 你有没有在深夜调试模型时,刚运行 import torch 就被一条红色报错拦住去路? ImportError: libcudart.so.11.0: cannot open shared object file: No such file or…

作者头像 李华
网站建设 2026/6/15 14:33:16

基于SSM框架的房屋中介公司网站

基于SSM框架的房屋中介公司网站介绍 一、技术架构与核心优势 基于SSM(SpringSpringMVCMyBatis)框架开发的房屋中介网站,采用经典的MVC分层设计模式,具备以下技术优势: 高扩展性 Spring的IoC容器实现模块解耦&#xff0…

作者头像 李华
网站建设 2026/6/15 15:47:22

智能驾驶域中CANFD带宽优化的项目应用

智能驾驶域中CAN FD带宽优化的实战经验:从92%负载到68%的破局之路在当前智能驾驶系统快速迭代的背景下,通信瓶颈正悄然成为制约性能提升的关键“隐性天花板”。我们曾在一个量产级L2智能驾驶项目中遭遇这样的挑战:域控制器集成多路雷达、摄像…

作者头像 李华