我正在使用Google Toolbox for Mac來測試我的應用程序。 我正在進行的測試檢查當搖動事件,專用控制器向webview發送消息時,以及HTML頁面通過執行「截圖」來正確響應。iPhone:等待webview加載自動測試
我遇到的問題是,如果web視圖沒有足夠的時間加載,它將不起作用。所以我用一個小動作「暫停」的考驗,等待的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秒鐘,這兩點是不行的,這是非常長,能夠加載本地文件...
而且,後來,我在與
stringByEvaluatingJavaScriptFromString:
web視圖執行JavaScript和我必須等待一個動畫來執行,所以我使用相同的代碼:
NSDate *restart = [NSDate date];
while ( [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]
&&
(-[restart timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView
);
而這需要50秒鐘! (動畫甚至不持續第二...)
我認爲( - [重啓timeIntervalSinceNow])< allowedTimeToLoadALocalFileInWebView是無用的,因爲它看起來runMode:beforeDate:在第二種情況下需要更多的時間比我allowedTimeToLoadALocalFileInWebView 。
我還試圖用
[NSThread sleepForTimeInterval:allowedTimeToLoadALocalFileInWebView];
但這阻止的結果是可見的。
你知道爲什麼加載webview需要這麼長時間才能加載本地文件嗎?另一種等待動畫而不使用runMode的方法:beforeDate:?
你爲什麼要使用這樣的計時器謝謝
感謝您的答案,實際上我使用webViewDidFinishLoad:我將TestCase作爲委託,並且在調用委託方法時將webViewLoaded設置爲YES。問題在於,由於它是一種測試方法,因此需要在開始下一個測試之前完成,以確保所有測試都已被調用。所以我不能在委託方法中做我的測試。此外,如果我只是做(webViewLoaded)webview永遠不會加載,我認爲它不是多線程。最後但並非最不重要的是,在我的第二個測試中,我執行了一個JavaScript命令,並且這不會調用webViewDidFinishLoad。 – Julien 2011-03-04 14:43:42