0

Google Toolbox for Mac を使用してアプリケーションをテストしています。私が取り組んでいるテストでは、シェイク イベントが発生すると、専用コントローラーがメッセージを Web ビューに送信し、HTML ページが「スクリーンショット」を実行して正しく応答することを確認します。

私が抱えている問題は、webview を読み込む時間がないと機能しないことです。そこで、ちょっとしたトリックを使ってテストを「一時停止」し、webview が読み込まれるのを待ちます。

#define allowedTimeToLoadALocalFileInWebView 5.5

NSDate *start = [NSDate date];

while (
// webViewLoaded is false at the beginning
///the Test class is a delegate of the webview, and webviewLoaded is set to true when - (void)webViewDidFinishLoad:(UIWebView *)webView is called 
     !webViewLoaded
    &&
    [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]
    && 
    (-[start timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView
    );

奇妙なことは、allowedTimeToLoadALocalFileInWebView を 5 秒未満で使用すると機能しないことです。これは、ローカル ファイルをロードするのに非常に長い時間です...

さらに、後で、webView で javascript を実行します。

stringByEvaluatingJavaScriptFromString:

、アニメーションが実行されるのを待つ必要があるため、同じコードを使用します。

NSDate *restart = [NSDate date];

while (  [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]
       && 
       (-[restart timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView
       );

これには 50 秒ほどかかります。(アニメーションは1秒も続きません...)

(-[restart timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView は、2 番目のケースで runMode:beforeDate: が私の allowedTimeToLoadALocalFileInWebView よりも時間がかかるように見えるため、役に立たないと思います。

私も使ってみました

[NSThread sleepForTimeInterval:allowedTimeToLoadALocalFileInWebView];

ただし、これにより結果が表示されなくなります。

webview の読み込みにローカル ファイルの読み込みに時間がかかる理由について何か考えはありますか? runMode:beforeDate: を使用せずにアニメーションを待機する別の方法は?

ありがとうございました

4

2 に答える 2

2

さて、問題は [NSDate distanceFuture] の現在のループを実行することでした。私はこのように待って問題を解決しました:

while (! webViewLoaded && (-[start timeIntervalSinceNow]) < timeOut) {
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:allowedTimeToLoadALocalFileInWebView]];
}

タイムアウトは、webView がロードされない場合にテストが失敗するためのものです (私たちにはわかりません)。これらのテストは自動的に開始されるため、サーバーが無限ループで実行されることは望ましくありません。以前はテストに 1 分以上かかっていましたが、現在は 3.5 秒です。

于 2011-03-09T08:21:38.430 に答える
0

なぜそのようなタイマーを使用しているのですか?UIWebViewDelegate メソッドを使用して、UIWebView が読み込まれたときに聞くことを検討しましたか? UIWebViewDelegate のドキュメントを確認してください。特に、 を参照してくださいwebViewDidFinishLoad:

于 2011-03-04T12:04:49.023 に答える