SeleniumWebDriver在加载Javascript之前单击元素

SeleniumWebDriver在加载Javascript之前单击元素,javascript,ajax,selenium,webdriver,Javascript,Ajax,Selenium,Webdriver,我正在使用Firefox驱动程序在Selenium 2.0中编写一些自动化测试。该站点使用许多绑定,例如带有触发javascript函数的“data val method to execute”属性的“input”标记 我的测试中有10%是随机失败的,因为驱动程序在加载相应的javascript函数之前单击了一个元素,所以不会发生任何事情 一个解决方案可能是线程。睡眠问题是:我必须在我的所有testsquite中大量实现。他们会大大降低我的测试速度,时间是个问题。睡眠时间为1秒的简单下拉列表并不

我正在使用Firefox驱动程序在Selenium 2.0中编写一些自动化测试。该站点使用许多绑定,例如带有触发javascript函数的“data val method to execute”属性的“input”标记

我的测试中有10%是随机失败的,因为驱动程序在加载相应的javascript函数之前单击了一个元素,所以不会发生任何事情


一个解决方案可能是线程。睡眠问题是:我必须在我的所有testsquite中大量实现。他们会大大降低我的测试速度,时间是个问题。睡眠时间为1秒的简单下拉列表并不总是有效,因此我必须增加超时时间

您需要找到一种方法让Selenium等待页面准备就绪。对于这一点,没有一刀切的解决方案。这真的取决于你做什么

对于一些复杂的AJAX/JavaScript,我必须使用phantomjs并添加计算打开/活动网络连接数的代码。测试将等待,直到数量发生变化,我知道AJAX请求已经发送,然后直到活动连接的数量下降到0,我知道AJAX已经完成

或者,尝试向页面添加一个隐藏的DIV,告诉测试所有脚本都已完成。等待DIV出现。这里的问题是确保AJAX处理程序创建DIV


为了避免污染您的代码,使用一个空函数创建DIV,并在运行覆盖函数的测试时在头部插入一个附加元素。

您是否在WebdriverWait类旁边使用ExpectedConditions类?我不使用ExpectedConditions,因为驱动程序成功地找到了元素。感谢您的回复,我将实现您的隐藏DIV解决方案并进行一些测试。至于AJAX请求,它们不会造成问题,因为我可以在请求完成后使用webdriver等待特定元素。我相信它将来会派上用场的。