Implicit wait隐式等待内部使用的expectedcondition是什么?
问题解答
隐式等待(Implicit wait)并没有直接复用显式等待体系下可自定义的ExpectedCondition实现,它是直接写在WebDriver底层元素查找逻辑里的硬编码判定规则,效果完全等价于显式等待的presenceOfElementLocated条件:只要DOM树中存在匹配对应定位表达式的元素节点,不管元素是否可见、是否可交互,都会立刻判定查找成功,终止等待。
核心逻辑细节
- 隐式等待是全局级配置,一旦给driver实例设置了隐式等待超时,所有
findElement()、findElements()调用都会自动触发轮询逻辑,不需要用户手动指定等待条件 - 轮询过程中的判定规则非常简单:
- 按传入的定位符去DOM树遍历匹配节点
- 对
findElement()来说,只要拿到第一个匹配的节点就直接返回,停止等待;对findElements()来说,只要拿到非空的匹配节点列表就直接返回 - 如果直到超时时间耗尽仍未匹配到任何节点,才抛出
NoSuchElementException
- 和常见显式等待条件的差异:
- 不校验元素可见性:哪怕元素设置了
display: none、visibility: hidden,或者宽高为0,只要DOM里存在对应节点,隐式等待就会判定查找成功,这和visibilityOfElementLocated的判定逻辑完全不同 - 不校验元素可交互状态:不会判断元素是否被禁用、是否被其他元素遮挡,和
elementToBeClickable的判定逻辑没有交集 - 不校验元素稳定性:不会等待元素位置、属性停止变动,只要DOM节点存在就立刻返回
- 不校验元素可见性:哪怕元素设置了
注意:Selenium官方明确不建议混合使用隐式等待和显式等待,两者的等待逻辑会叠加,导致实际等待时长超出预期,出现难以排查的超时问题。
内容的提问来源于stack exchange,提问作者user2044296
相关产品推荐
相关产品推荐

