在单击selenium Web驱动程序中的任何元素之前,最好使用Thread.sleep()或显式等待

Jug*_*ugi 5 automation selenium-grid selenium-webdriver

我是网络驱动程序的新手,我为web应用程序编写了一个包含backbone.js和select2的selenium脚本.

我以前经常使用NosuchElementException而Element不是可点击的例外.所以我决定编写如下脚本, - 在点击任何元素之前,它将使用显式等待等待元素的存在.即在单击任何元素之前,它将等待元素加载.

在点击之前等待每个元素是最佳做法吗?

nil*_*esh 11

明确地等待某个元素及其特定状态是selenium-webdriver中的最佳实践.睡眠永远不是一个好主意,因为你的睡眠超时可能更少或更多,因此使你的测试不一致和不确定.

使用WebDriver 等待是同步问题的最佳解决方案.所以在JS这样的事情,

var until = webdriver.until;
var searchBox = 
driver.wait(until.elementIsEnabled(driver.findElement(webdriver.By.name('q'))),5000,'Search button is not enabled');  
Run Code Online (Sandbox Code Playgroud)


Kum*_*eya 5

使用显式等待/隐式等待是最好的做法,让我们检查一下实际显式等待,Thread.sleep(),隐式等待的工作逻辑

显式等待:显式等待是在代码中继续进行之前等待某种情况发生的一种情况.

隐式等待:隐式等待是指在尝试查找一个或多个元素(如果它们不是立即可用)时,将WebDriver轮询DOM一段时间.默认设置为0

Thread.sleep()在睡眠代码中,即使工作页面在1秒后准备好,也会在括号旁边等待提到的秒数.所以这会减慢测试速度.