2012-12-20 57 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秒),然后在之后重置为正常将导致更快的执行时间。 –

相关问题