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

显式等待和隐式等待的区别

在 Selenium 自动化测试中,​显式等待(Explicit Wait)​​ 和 ​隐式等待(Implicit Wait)​​ 是两种控制元素等待的机制,它们的核心区别如下:


1. 显式等待(Explicit Wait)​

  • 定义​:针对特定条件(如元素可点击、可见等)设置明确的等待时间,直到条件满足或超时。

  • 特点​:

    • 精准控制​:只对指定的元素和条件生效,其他操作不受影响。
    • 灵活的条件​:支持多种预定义条件(如 presence_of_element_locatedvisibility_of_element_locatedelement_to_be_clickable 等),也可自定义条件。
    • 超时后抛出异常​:如果条件未在指定时间内满足,会抛出 TimeoutException
  • 使用场景​:
    需要等待动态加载的元素(如 AJAX 请求后的元素)、特定状态(如按钮可点击)等。

  • 代码示例​:

    python

    运行

    复制

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC# 设置显式等待:最多等待10秒,直到元素可点击
    element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "submit-button"))
    )

2. 隐式等待(Implicit Wait)​

  • 定义​:为整个 WebDriver 实例设置一个全局的等待时间,在查找元素时,如果元素未立即出现,会轮询 DOM 直到超时。

  • 特点​:

    • 全局生效​:对所有 find_element 或 find_elements 操作生效。
    • 简单但粗糙​:无法针对特定条件(如元素可点击)设置等待,只能等待元素存在于 DOM 中。
    • 超时后抛出异常​:如果元素未在指定时间内找到,会抛出 NoSuchElementException
  • 使用场景​:
    适用于简单的页面加载,或需要统一设置全局等待时间的情况(但不推荐过度依赖)。

  • 代码示例​:

    # 设置隐式等待:全局等待5秒
    driver.implicitly_wait(5)# 后续所有 find_element 操作都会应用这个等待时间
    element = driver.find_element(By.ID, "username")

核心区别总结

特性显式等待隐式等待
作用范围针对特定元素和条件全局所有 find_element 操作
等待条件支持多种条件(如可点击、可见等)仅等待元素存在于 DOM
灵活性高(可定制条件和超时时间)低(固定等待时间)
推荐使用场景动态元素、复杂交互简单页面或统一基础等待
是否推荐优先使用​(更精准、可靠)不推荐(易导致不可控延迟)

最佳实践建议

  1. 优先使用显式等待​:尤其是处理动态内容或需要特定条件的场景。
  2. 避免混合使用​:显式和隐式等待同时启用可能导致不可预测的等待时间(如隐式等待的轮询可能干扰显式等待的逻辑)。
  3. 隐式等待慎用​:仅在必要时设置全局等待,且时间不宜过长(通常 1-5 秒足够)。

通过合理选择等待策略,可以显著提升测试脚本的稳定性和执行效率。

http://www.lryc.cn/news/600969.html

相关文章:

  • 伟淼科技李志伟:破解二代接班传承困局,系统性方案破除三代魔咒
  • pytorch学习笔记-自定义卷积
  • Bert项目--新闻标题文本分类
  • C# 位运算及应用
  • 【简述】C++11/14/17/20/23 中的关键新特性
  • 无源域自适应综合研究【3】
  • ts-node 深入全面讲解
  • IntelliJ IDEA 的“缩短命令行”:解决长类路径的利器
  • 《Moco: Momentum Contrast for Unsupervised Visual Representation Learning》论文精读笔记
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • 学习嵌入式的第三十一天-数据结构-(2025.7.23)网络协议封装
  • Houdini快速模拟烟雾
  • 从0开始学linux韦东山教程Linux驱动入门实验班(5)
  • ThreadLocal--ThreadLocal介绍
  • SGLang 核心技术详解
  • 20250726-3-Kubernetes 网络-Service三种常用类型_笔记
  • 创建 Vue 项目的 4 种主流方式
  • 嵌入式——C语言:指针②
  • 智慧城市多目标追踪精度↑32%:陌讯动态融合算法实战解析
  • 【科普】java和html和lvgl生成页面有什么区别,还有什么方法可以生成?
  • Python深入 Tkinter 模块
  • OpHReda精准预测酶最佳PH
  • Ubuntu 22.04 配置 Zsh + Oh My Zsh + Powerlevel10k
  • dify前端应用相关
  • 超时进行报警例子
  • 成都陆军学校计算机科学学院编程马拉松活动计划书
  • linux线程概念和控制
  • java服务线程泄露临时解决脚本
  • .bat 打开方式恢复
  • QT中启用VIM后粘贴复制快捷键失效