10

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

//导航到我的测试页面。

字符串脚本=“var回调=参数[arguments.length - 1];” +
                "getResult(回调)";

对象结果 = ((JavascriptExecutor)driver).executeAsyncScript(script, "");

System.out.println(结果);

测试页面包含以下脚本:

变量结果=真;
函数获取结果(回调){
    window.setTimeout(function(){callback(true);}, 3000);
}

这会引发异常:

失败:testSeleniumAsync
org.openqa.selenium.TimeoutException:脚本执行失败。脚本: var callback = arguments[arguments.length - 1];getResult(callback);
 2 毫秒后等待异步脚本结果超时(警告:服务器未提供任何堆栈跟踪信息)
命令持续时间或超时:11 毫秒
构建信息:版本:'2.25.0',修订:'17482',时间:'2012-07-18 22:18:01'
系统信息:os.name:'Linux',os.arch:'amd64',os.version:'3.2.0-27-generic',java.version:'1.6.0_26'
驱动程序信息:driver.version:RemoteWebDriver
会话 ID:6347b507cf22b6c2d3312937a82a0a02
    在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

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

谢谢。

4

1 回答 1

23

API 在 2 毫秒内超时,这很奇怪。

我猜脚本超时配置不正确(<= 0sec)。由于您的窗口超时发生在 3 秒后,因此请在拨打电话之前尝试将脚本超时设置为大于 3 秒的某个值。

像这样:

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

那可能行得通。

于 2012-07-28T14:20:29.740 回答