【问题标题】:In Selenium do I need to disable an implicit wait when using an explicit wait?在 Selenium 中,使用显式等待时是否需要禁用隐式等待?
【发布时间】:2016-01-02 04:30:25
【问题描述】:

创建驱动程序时,我已将隐式等待时间设置为 10 秒。当我希望使用显式等待时,是否必须将隐式等待设置为 0?

这是一个示例:

WebDriver webDriver = new FirefoxDriver();
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Now I want to use Explicit wait

我必须做 webDriver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);还是没有必要?

WebDriverWait wait = new WebDriverWait(webDriver, WAIT_FOR_TIMEOUT_SEC);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));

【问题讨论】:

  • 这个问题在当前状态下看起来不错。

标签: java c# selenium selenium-webdriver automation


【解决方案1】:

没有必要将隐式等待时间重新声明为零。

原因:当您说要使用显式等待时,仅表示您的隐式等待时间不足以等待元素出现,因此您声明了显式等待在特定动作之后。

何时应该使用隐式等待: 隐式等待是一种告诉 selenium 在执行每个操作后等待特定时间段的方法。这有助于同步您执行的大多数操作。你给的时间越长,你的测试执行得越慢。 More about implicit wait

何时应该使用显式等待:当特定操作需要时间来执行或加载到 DOM 时使用显式等待。这并不告诉 selenium 在每个动作之后等待特定时间,而是告诉 selenium 在执行特定动作之前等待一段时间。 More about explicit wait

来自 Selenium 网站的警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。例如,设置 10 秒的隐式等待和 15 秒的显式等待,可能会导致 20 秒后发生超时。

希望对你有帮助。

【讨论】:

  • 你的意思是当我们使用显式等待时,它会抵消隐式等待的效果?
  • @Rameshwar 不,它不会取消该效果。它增加了它,但并不准确。但它确实增加了一点等待时间,以便webdriver 有更多时间轮询元素出现。更新了答案以包含您的查询。
  • 如果我的隐式等待是 10 秒,显式等待是 5 秒,并且等待的元素出现在第 7 秒怎么办?我会通过超时异常显式等待吗?
  • Selenium 通过以指定的时间间隔轮询来检查在隐式和显式超时期间是否满足ExpectedCondition。如果未找到,则会引发错误。如果找到,则将跳过等待。因此,当您将两者一起使用时,总会有歧义。因此,如果您的元素出现在第 7 秒,它将根据出现的时间停止等待元素,并跳过隐式和显式等待或仅其中一个。虽然它会执行显式等待命令,但由于元素已经存在,硒不会等待任何东西。
猜你喜欢
  • 2012-05-11
  • 2018-01-24
  • 2018-01-22
  • 1970-01-01
  • 2020-10-11
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多