提问人:user3559982 提问时间:11/1/2023 最后编辑:Guyuser3559982 更新时间:11/1/2023 访问量:47
Selenium 中的隐式等待
implicit wait in selenium
问:
我对如何在硒中使用隐式等待感到非常困惑
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(4, TimeUnit.SECONDS);
我经常看到有人把这两个行号写在一起。我们为什么需要这条线?我认为第一行就足够了。pageLoadTimeOut
我通过谷歌搜索了很多,但仍然感到困惑
答:
0赞
Guy
11/1/2023
#1
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 未通过异常,则表示已找到该元素并加载了页面。
评论