2015-10-05 56 views
0

當我的驅動程序被創建時,我已經將我的隱含等待設置爲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

這個問題在當前狀態下看起來很好。 –

回答

3

這是沒有必要重新申報隱等待時間回零。

原因:當你說你想用一個明確的等待,它只是意味着你的隱等待時間是不夠的,等待元素出現,那麼你宣佈一個特定的動作後,一個明確的等待。

何時應該使用隱式等待:隱式等待是一種告訴硒在執行每個動作後等待特定時間段的方法。這有助於同步執行的大多數操作。您的測試執行越慢,時間就越長。 More about implicit wait

何時應該使用顯式等待:當特定操作需要時間來執行或加載到DOM時,將使用顯式等待。這並不表示硒在每一個動作之後都要等待特定的時間,而是讓硒等待一段時間,然後才執行特定的動作。 More about explicit wait

來自Selenium網站的警告:不要混合隱式和顯式等待。這樣做會導致無法預測的等待時間。例如,設置10秒的隱式等待和15秒的顯式等待可能會導致20秒後發生超時。

希望它有幫助。

+0

您的意思是說,當我們使用明確的等待時,它會取消隱式等待的效果? – Rameshwar

+0

@Rameshwar不,它並沒有取消那個效果。它增加了它,但不準確。但它確實增加了等待時間,以便'webdriver'有更多時間來輪詢元素出現。更新答案以包含您的查詢。 –

+0

如果我的隱含等待時間是10秒,而明確的等待時間是5秒,那麼等待的元素出現在第7秒?我會明確地等待超時異常嗎? – Rameshwar

相關問題