无法执行Selenium异步脚本

时间:2012-07-25 09:23:12

标签: java selenium-webdriver

为什么我在尝试执行异步脚本时遇到了selenium 2.25.0的异常。

//navigate to my test page.

String script = "var callback = arguments[arguments.length - 1];"  +
                "getResult(callback)";

Object result = ((JavascriptExecutor)driver).executeAsyncScript(script, "");

System.out.println(result);

测试页面包含以下脚本:

var result = true;
function getResult(callback){
    window.setTimeout(function(){callback(true);}, 3000);
}

这会引发异常:

FAILED: testSeleniumAsync
org.openqa.selenium.TimeoutException: Script execution failed. Script: var callback = arguments[arguments.length - 1];getResult(callback);
 Timed out waiting for asyncrhonous script result after 2 ms (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 11 milliseconds
Build info: version: '2.25.0', revision: '17482', time: '2012-07-18 22:18:01'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-27-generic', java.version: '1.6.0_26'
Driver info: driver.version: RemoteWebDriver
Session ID: 6347b507cf22b6c2d3312937a82a0a02
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

如果我从我的脚本中删除了setTimeout并且我调用了回调它就可以了。但这不是我想要的。

感谢。

1 个答案:

答案 0 :(得分:22)

非常奇怪,API会在2毫秒内超时。

我猜测脚本超时是以某种方式错误配置的(< = 0sec)。由于您的窗口超时发生在3秒后,请在拨打电话之前尝试将脚本超时设置为大于3秒的值。

像这样:

driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS);

这可能有效。