10

非同期スクリプトを実行しようとすると、セレン2.25.0で例外が発生するのはなぜですか。

//テストページに移動します。

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

オブジェクトの結果=((JavascriptExecutor)driver).executeAsyncScript(script、 "");

System.out.println(result);

テストページには、次のスクリプトが含まれています。

var result = true;
function getResult(callback){
    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(ネイティブメソッド)で
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)で
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)で

スクリプトからsetTimeoutを削除し、callbackを呼び出すと、機能します。しかし、これは私が望むものではありません。

ありがとう。

4

1 に答える 1

23

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

スクリプトのタイムアウトがどういうわけか正しく構成されていない(<= 0秒)と推測しています。ウィンドウのタイムアウトは3秒後に発生するため、電話をかける前に、スクリプトのタイムアウトを3秒を超える値に設定してみてください。

そのようです:

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

それはうまくいくかもしれません。

于 2012-07-28T14:20:29.740 に答える