Selenium 中的隐式等待

implicit wait in selenium

提问人:user3559982 提问时间:11/1/2023 最后编辑:Guyuser3559982 更新时间:11/1/2023 访问量:47

问:

我对如何在硒中使用隐式等待感到非常困惑

driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(4, TimeUnit.SECONDS);

我经常看到有人把这两个行号写在一起。我们为什么需要这条线?我认为第一行就足够了。pageLoadTimeOut

我通过谷歌搜索了很多,但仍然感到困惑

java selenium-webdriver 等待 隐式 pageloadtimeout

评论


答:

0赞 Guy 11/1/2023 #1

看一看 WebDriver.Timeouts

pageLoadTimeout(Duration duration)

设置在引发错误之前等待页面加载完成的时间。

implicitlyWait(Duration duration)

指定驱动程序在搜索元素时应等待的时间量(如果该元素未立即存在)。

没有理由在几个地方写这些,这是一生中保留的一次性设置。driver

您还应该注意,您使用的是已弃用的方法和 .implicitlyWait(long time, TimeUnit unit)pageLoadTimeout(long time, TimeUnit unit)

0赞 mahesh tawde 11/1/2023 #2

两个超时的目的完全不同,因此这两个超时都作为框架/脚本中设置的一部分调用。

implicitlyWait- 将在 findElement 调用时使用 findElements 等待超时持续时间后分别返回 NoSuchElementException、Empty List。

pageLoadTimeout- 每当加载页面并读取网页的属性时,Selenium 都会隐式使用。但是,这仅适用于同步页面加载,而不适用于 AJAX 调用或在网页上加载的动态内容。document.readyState

由于这两个用例完全不同,因此我们使用不同的等待策略。因为页面加载可能比在网页上加载动态元素花费更长的时间。

评论

0赞 user3559982 11/1/2023
作为设置的一部分,我们是否可以仅使用 implicitlyWait 并消除 pageLoadTimeout 代码?因为如果页面未加载,则与 findElement 结合的 implicitlyWait 将抛出 NoSuchElementException。因此,我们不需要 pageLoadTimeOut 代码。这让我很困扰,我不明白为什么仍然需要pageLoadTimeOut。如果 implicitlyWait 未通过异常,则表示已找到该元素并加载了页面。