【问题标题】:Java Selenium WebDriverJava Selenium 网络驱动程序
【发布时间】:2015-02-22 18:05:11
【问题描述】:

我在我的脚本中使用隐式等待

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

正如我在谷歌搜索时搜索的那样,一旦驱动程序无法找到指定的定位器,隐式等待等待指定的时间段,这里是 30 秒。

但在我的脚本的情况下,最初元素会在 2 或 3 秒后隐藏,因此一旦元素出现,驱动程序就能找到它。不等待 30 秒。

任何人都知道为什么它像流利的等待一样工作。

【问题讨论】:

  • 为什么不使用显式等待?
  • 我正在检查流利等待和隐式等待之间的区别,不同站点上的每个文档流式等待首先使用轮询机制和隐式等待检查定位器,然后等待指定的时间段,无论元素是否存在它会等待。但在我的脚本中,隐式等待也使用轮询。

标签: selenium-webdriver


【解决方案1】:

有关隐式等待,请参阅文档-

当搜索单个元素时,驱动程序应该轮询页面直到找到该元素,或者在抛出 {@link NoSuchElementException} 之前超时到期。搜索多个元素时,驱动程序应轮询页面,直到找到至少一个元素或此超时已过期。

因此,根据文档,有一个轮询机制会一直执行到超时发生。您在implicitlyWait(30, TimeUnit.SECONDS) 中提供的时间,即此处的 30 秒意味着它将等待 ma​​x 30 秒并伴随连续轮询。一旦它获得元素,它将返回驱动程序以进一步执行,除非发生超时,因此抛出NoSuchElementException。不要将它与您可以暂停执行线程的Thread.sleep 进行比较。

【讨论】:

  • 根据不同站点上的文档隐式等待不使用轮询机制。对于轮询等待,我们使用流利的等待。您能否分享我可以研究隐式等待的文档或链接也有轮询等待行为。
  • 请访问api文档here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多