Selenium中隐式等待(Implicit Wait)和显式等待(Explicit Wait)的区别

Selenium中隐式等待(Implicit Wait)和显式等待(Explicit Wait)的区别


1)本质区别:它们“等的对象”不一样

隐式等待等的是:

**元素查找(findElement / findElements)**这件事。

也就是说,隐式等待只在你调用driver.findElement(...)这一刻生效:在超时时间内不断重试“查找元素”,找到就返回,找不到就一直试到超时抛异常。

显式等待等的是:

某个明确条件(ExpectedCondition)成立

条件可以是“元素可见/可点击/存在”“URL 变了”“文本出现了”“alert 出现了”等等——它不局限于“找元素”。

这就是为什么你说的那句成立:隐式等待无法等待 alert,因为 alert 不是通过 findElement 找到的 DOM 元素。


2)作用范围:全局 vs 局部

隐式等待:全局配置,一次设置长期生效

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

设置后,只要这个driver还在,后续每一次findElement都会带着这 10 秒的“自动重试”。

显式等待:局部使用,想等哪就等哪

WebDriverWaitwait=newWebDriverWait(driver,Duration.ofSeconds(10));wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw")));

你在需要的地方才写一段等待逻辑,不需要的地方不影响。


3)能等什么:隐式等待“只等元素”,显式等待“啥都能等(条件允许)”

隐式等待能等的典型东西

  • 页面元素出现(presence)
  • 页面元素最终能被找到(findElement 成功)

但注意:隐式等待只保证“找到元素”,不保证它:

  • 可见(visible)
  • 可点击(clickable)
  • 不被遮挡
  • 文本已经渲染完

所以隐式等待经常出现“找到了但点不了/拿不到文本”的情况。

显式等待能等的典型东西(举几个高频)

  • 元素可点击:elementToBeClickable
  • 元素可见:visibilityOfElementLocated
  • 元素存在于 DOM:presenceOfElementLocated
  • 文本出现/变为某值:textToBePresentInElementLocated/textToBe
  • URL 变化:urlContains/urlToBe
  • 弹窗出现:alertIsPresent()

示例:等待 alert 出现并接受

WebDriverWaitwait=newWebDriverWait(driver,Duration.ofSeconds(10));Alertalert=wait.until(ExpectedConditions.alertIsPresent());alert.accept();

这段是隐式等待做不到的,因为它根本不走findElement


4)对“找不到元素”行为的影响:异常类型与重试方式

  • 隐式等待:只要findElement没找到,就反复重试;最终超时会抛NoSuchElementException(常见表现)
  • 显式等待:内部轮询条件;最终超时会抛TimeoutException(更像“条件没满足”)

这点在定位问题时很有用:
看到TimeoutException通常说明你等的条件一直没成立,而不是“元素压根不存在”。


5)为什么不建议混用:时间会变得“不可预测”

当你同时开了:

  • 隐式等待 10 秒
  • 显式等待 10 秒

显式等待内部也会反复调用元素查找/条件判断,而这些查找又会被隐式等待“拖住”。最终你以为最多等 10 秒,实际可能更久(常见表现:超时明显大于显式等待设置值)。

实战上更稳的策略通常是:

  • 主用显式等待(精确、可控)
  • 隐式等待要么不用,要么设很小(例如 0~1 秒)避免干扰

6)典型场景对比:你会在哪踩坑

场景 A:元素是动态渲染的(ajax)

  • 隐式等待:能帮你等到“元素出现在 DOM”
  • 显式等待:不仅能等到出现,还能等到“可见/可点/文本更新”

场景 B:点击后出现 alert

  • 隐式等待:无效(alert 不是 DOM 元素)
  • 显式等待:alertIsPresent()一把梭

场景 C:元素存在但被遮挡(弹层/加载动画)

  • 隐式等待:可能找得到但点不了,直接ElementClickInterceptedException
  • 显式等待:可以等到elementToBeClickable(但如果一直被遮挡也会超时)

7)总结

  • 隐式等待:给findElement加“全局重试”,简单但粗糙,等不到 alert,也不擅长等“可点击/可见/文本更新”。
  • 显式等待:按条件等,颗粒度细、可控,能等元素状态、URL、文本、alert等,是写稳定脚本的主力工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1190939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据毕设项目推荐-基于django的直播带货商品数据分析可视化系统基于django大数据在直播带货商品选品中的应用【附源码+文档,调试定制服务】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

SSM277课程在线考试组卷管理系统vue

目录SSM277课程在线考试组卷管理系统Vue摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM277课程在线考试组卷管理系统Vue摘要 该系统基于SSM(SpringSpringMVCMyBatis)框架与Vue.js前端技术构建&a…

macOS部署docker容器的坑点

在macOS上,Docker的 --network host 模式与Linux不同,容器并不真正共享主机网络栈。需要使用端口映射来让PostgreSQL可以从主机访问。

SSM280的课程智能组卷考试系统vue

目录SSM280课程智能组卷考试系统(Vue版)摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM280课程智能组卷考试系统(Vue版)摘要 SSM280课程智能组卷考试系统是基于SpringSpr…

大数据毕设项目:基于django大数据在直播带货商品选品中的应用(源码+文档,讲解、调试运行,定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

SSM281的垃圾分类系统vue商城,礼品,考试

目录 SSM281垃圾分类系统概述核心功能模块技术实现亮点 开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! SSM281垃圾分类系统概述 SSM281垃圾分类系统是基于SSM(SpringSpringMVCMyBatis)框架与Vue.js前端…

智能体部署架构:突破性能极限的关键!

AI Agent 的部署架构没有万能解法,选择对了能事半功倍,选择错了则可能付出高昂的性能或成本代价。不同架构会直接影响性能表现、成本结构、延迟体验和适用场景。目前主流的四种部署模式包括批量部署、流式部署、实时部署和边缘部署。1.批量部署Agent 以定…

大数据毕设选题推荐:基于python大数据的国内自然地震数据可视化分析系统基于python的灾情数据可视化系统【附源码、mysql、文档、调试+代码讲解+全bao等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

【毕业设计】基于django大数据在直播带货商品选品中的应用(源码+文档+远程调试,全bao定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

计算机大数据毕设实战-基于python的洪涝灾情数据可视化系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

【课程设计/毕业设计】基于django大数据在直播带货商品选品中的应用直播带货商品数据分析可视化系统【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

大数据领域内存计算:构建实时数据处理的高效平台

大数据领域内存计算:构建实时数据处理的高效平台 关键词:内存计算、实时数据处理、分布式存储、低延迟、大数据平台 摘要:在电商大促的实时销量看板、金融交易的毫秒级反欺诈、物联网设备的实时监控中,“实时"二字正成为大数据价值的核心。传统依赖磁盘的计算方式因高…

即插即用系列 | CVPR 2025 AmbiSSL:首个注释模糊感知的半监督医学图像分割框架

论文题目:Annotation Ambiguity Aware Semi-Supervised Medical Image Segmentation 论文原文(paper):https://openaccess.thecvf.com/content/CVPR2025/html/Kumari_Annotation_Ambiguity_Aware_Semi-Supervised_Medical_Image_S…

大数据计算机毕设之基于python的灾情数据可视化系统洪水预测系统 自然灾害预测可视化(完整前后端代码+说明文档+LW,调试定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

大数据毕设项目:基于python的灾情数据可视化系统(源码+文档,讲解、调试运行,定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

大模型本地部署,小号的vLLM来了!

文章介绍轻量级大模型推理引擎Nano-vLLM,这是代码简洁(约1200行Python)的vLLM替代实现。它提供快速离线推理能力,API与vLLM类似,在小模型测试中性能甚至优于vLLM。文章详解安装方法、模型下载途径(包括mode…

Kuikly 框架架构与目录导览(HarmonyOS 视角)

本文从 KuiklyUI 源码仓库结构出发,解释 Kuikly 的整体架构、每个关键目录的职责,并给出 鸿蒙开发只需关注的目录清单,便于快速进入开发状态。先跟大家说个好消息,该框架已经解决了windows平台的快速编译鸿蒙产物(也就…

速通秘籍!提示工程架构师上下文工程跨模态信息融合技术

速通秘籍!提示工程架构师的上下文工程与跨模态信息融合技术 引言:为什么你需要这门“速通课”? 作为一名提示工程架构师,你是否经常遇到这些痛点: 明明写了详细的提示,AI却“答非所问”——因为它没理解用户…

【课程设计/毕业设计】基于python大数据的睡在地震数据可视化分析系统基于python的灾情数据可视化系统【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

我是AI应用架构师,给某制造企业做算力规划的过程,全记录

AI应用架构师手记:某制造企业算力规划从0到1全流程拆解 标题选项(3-5个) AI赋能制造:某汽车零部件厂算力规划的7个关键步骤制造企业算力规划避坑指南:我的一次真实项目全复盘从需求到落地:一份可复用的制造…