2012-07-25 133 views
9

为什么在尝试执行异步脚本时,我在使用Selenium 2.25.0时遇到了异常。无法执行Selenium异步脚本

 
//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和我称之为回调它的工作原理。但这不是我想要的。

谢谢。

回答

21

奇怪的是API在2 ms内超时。

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

像这样:

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

可能的工作。

+1

让我添加一些我认为是常见的陷阱,((JavascriptExecutor)驱动程序).executeAsyncScript(script,“”); //将立即返回。 – redochka 2012-11-21 16:56:22

+0

@redsonic +1任何一天。 但在这种情况下,OP正在调用回调。 – 2012-11-22 06:03:56

+0

我在量角器中遇到同样的问题,我如何配置它? 我做了browser.manage()。timeouts()。setScriptTimeout(60000);但我有同样的错误! – Emna 2016-05-06 10:01:29