2012-12-20 75 views
5

根據硒,隱式等待輪詢DOM一段時間以查看元素是否顯示。我的理解是,它會輪詢特定的時間,但如果之前出現了一個元素,那麼它將繼續而不會進一步等待。Selenium隱式等待與Thread.sleep()

http://seleniumhq.org/docs/04_webdriver_advanced.html

我具有在約13秒運行一次的方法。當我將隱含等待設置爲100秒時,需要213秒。

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

看來,在這個方法中,我等待2次(每次100秒)。將隱式等待設置爲0或100不會影響我的方法。在這兩種情況下,他們都能正確完成

我的問題是這樣的。我認爲隱含的等待等待一個元素出現的最短時間。這是正確的嗎?或者我做錯了什麼?

此外,爲什麼它等待2次,當它顯然不需要等待? (我的方法完成正確,即使我設置的等待爲0)

+0

[selenium webdriver - 顯式等待vs隱式等待]的可能重複(http://stackoverflow.com/questions/10404160/selenium-webdriver-explicit-wait-vs-implicit-wait) – lesmana

回答

4

簡短的回答:

隱含的等待 - 這是適用於所有元素,並在元素全局設置出現之前指定的時間比腳本將開始執行,否則腳本扔NoSuchElementException。在設置方法中使用的最佳方法。隻影響By.findelement()

Thread.sleep() - 它會睡眠時間的腳本,不是在腳本中使用的好方法,因爲它是沒有條件的睡眠。

+0

如果驅動程序轉到另一個url,是隱含的等待還是有效的?或者我需要再次回想一下? – 8090PZ

+0

ma,無論URL如何,在運行期間生效。請注意,對於findElements,可以期望size()== 0.但是Selenium會等待最後指定的時間。如果頁面在測試時被加載,則在findElements之前減少隱式等待時間(例如1秒),然後在之後重置爲正常將導致更快的執行時間。 –

相關問題