2012-07-25 19 views
9

¿Por qué me sale una excepción con el selenio 2.25.0 cuando intento ejecutar un script asíncrono?No se puede ejecutar el script asíncrono 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); 

página La prueba contiene la siguiente secuencia de comandos:

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

Esto produce una excepción:

 
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) 

Si quito el setTimeout de mi guión y devolución de llamada funciona. Pero esto no es lo que quiero.

Gracias.

Respuesta

21

Es muy extraño que la API se agote en 2 ms.

Supongo que el tiempo de espera del script está de alguna manera configurado incorrectamente (< = 0sec). Como el tiempo de espera de la ventana se produce después de 3 segundos, intente configurar el tiempo de espera del script en un valor superior a 3 segundos antes de realizar la llamada.

así:

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

que podría funcionar.

+1

Déjeme agregar algo que creo que es una trampa común, ((JavascriptExecutor) controlador) .executeAsyncScript (script, ""); // volverá de inmediato. – redochka

+0

@redsonic +1 cualquier día. Pero en este caso, el OP está invocando la devolución de llamada. –

+0

Tengo el mismo problema en el transportador, ¿cómo puedo configurarlo? hice browser.manage(). Timeouts(). SetScriptTimeout (60000); pero tengo el mismo error! – Emna

Cuestiones relacionadas