在Selenium中,我是否需要在使用显式等待时禁用隐式等待?

问题描述:

当我的驱动程序被创建时,我已经将我的隐含等待设置为10秒。在Selenium中,我是否需要在使用显式等待时禁用隐式等待?

当我希望使用显式等待时,是否必须将隐式等待设置为0?

下面是一个例子:。

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

我必须做webDriver.manage()超时()implicitlyWait(0,TimeUnit.SECONDS);或者没有必要?

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

这个问题在当前状态下看起来很好。 –

这是没有必要重新申报隐等待时间回零。

原因:当你说你想用一个明确的等待,它只是意味着你的隐等待时间是不够的,等待元素出现,那么你宣布一个特定的动作后,一个明确的等待。

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

何时应该使用显式等待:当特定操作需要时间来执行或加载到DOM时,将使用显式等待。这并不表示硒在每一个动作之后都要等待特定的时间,而是让硒等待一段时间,然后才执行特定的动作。 More about explicit wait

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

希望它有帮助。

+0

您的意思是说,当我们使用明确的等待时,它会取消隐式等待的效果? – Rameshwar

+0

@Rameshwar不,它并没有取消那个效果。它增加了它,但不准确。但它确实增加了等待时间,以便'webdriver'有更多时间来轮询元素出现。更新答案以包含您的查询。 –

+0

如果我的隐含等待时间是10秒,而明确的等待时间是5秒,那么等待的元素出现在第7秒?我会明确地等待超时异常吗? – Rameshwar