2012-07-25 11 views
9

なぜ非同期スクリプトを実行しようとしている場合、Selenium 2.25.0で例外が発生しますか?私は私のスクリプトからのsetTimeoutを削除し、私はそれが動作するコールバックを呼び出す場合Selenium非同期スクリプトを実行できません

 
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) 

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

これは例外をスロー:

 
//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); 

テストページには、次のスクリプトが含まれています。しかし、これは私が望むものではありません。

ありがとうございました。

答えて

21

APIが2ミリ秒でタイムアウトするのは非常に奇妙です。

私は、スクリプトのタイムアウトが間違って設定されていると推測しています(< = 0秒)。 3秒後にウィンドウのタイムアウトが発生するため、呼び出しを行う前にスクリプトのタイムアウトを3秒を超える値に設定してみてください。そのよう

:働くかもしれない

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

+1

一般的な落とし穴((JavascriptExecutor)ドライバと思われるものを追加します).executeAsyncScript(script、 ""); //すぐに戻ります。 – redochka

+0

@redsonic +1任意の日。 しかしこの場合、OPはコールバックを呼び出しています。 –

+0

私は分度器で同じ問題を抱えていますが、どうすれば設定できますか? 私はbrowser.manage()を実行しました。タイムアウト()。setScriptTimeout(60000);しかし、私は同じエラーがあります! – Emna

関連する問題