0

Mac 용 Google Toolbox를 사용하여 응용 프로그램을 테스트하고 있습니다. 내가 작업중인 테스트에서는 흔들기 이벤트, 전용 컨트롤러가 메시지를 웹보기로 보내고 HTML 페이지가 "스크린 샷"을 보내서 올바르게 응답하는지 확인합니다.iPhone : 자동화 된 테스트에서로드 할 웹보기 대기

내가 가진 문제는 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 초 이상을 사용하는 경우 작동하지 않는다는 것입니다, 이는 매우이다

게다가, 나중에, I는

stringByEvaluatingJavaScriptFromString: 

와 웹보기에서 자바 스크립트를 실행하고 I이 수행 될 애니메이션 기다릴 필요 그래서 ... 로컬 파일을로드 할 긴 같은 코드를 사용하십시오 :

NSDate *restart = [NSDate date]; 

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

그리고 이것은 50 초 정도 걸립니다! beforeDate이 : 두 번째 경우에 내 allowedTimeToLoadALocalFileInWebView보다 더 많은 시간이 걸린다는 RunMode에가 나타납니다 이후 < allowedTimeToLoadALocalFileInWebView 쓸모 - ([timeIntervalSinceNow를 다시 시작])

내가 생각 (애니메이션도 ... 두 번째 지속되지 않음) .

는 또한

[NSThread sleepForTimeInterval:allowedTimeToLoadALocalFileInWebView]; 

을 사용하려고하지만이 결과를 볼 수 있도록 방지 할 수 있습니다.

로컬 파일을로드하는 데 webview를로드하는 데 너무 오래 걸리는 이유에 대해 알고 계십니까? 그리고 runMode를 사용하지 않고 애니메이션을 기다리는 또 다른 방법은 : beforeDate :?

고맙습니다.

답변

2

좋아요, 문제는 [NSDate distantFuture]에 대한 현재 루프를 실행하는 것이 었습니다. 나는 다음과 같이 대기하여 문제를 해결 :

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

웹보기가 결코 부하 경우 테스트가 (우리가 모를) 우리는 자동으로 그 테스트를 시작하기 때문에, 우리는에 서버를 싶지 않아 실패에 대한 시간 초과입니다 무한 루프에서 실행됩니다. 테스트가 1 초 이상 걸렸습니다. 이제 3.5 초가 걸렸습니다!

0

왜 타이머를 사용하고 있습니까? UIWebViewDelegate 메서드를 사용하여 UIWebView가로드 된 것을 들으셨습니까? UIWebViewDelegate에 대한 문서를 확인하십시오 - 특히 webViewDidFinishLoad:을 참조하십시오.

+0

답변 주셔서 감사합니다. 실제로는 webViewDidFinishLoad를 사용합니다. 위임자로 TestCase를 사용하고 위임 메서드가 호출되면 webViewLoaded가 YES로 설정됩니다. 문제는 테스트 방법이기 때문에 다음 테스트를 시작하기 전에 완료해야하기 때문에 모든 테스트가 호출되었다고 확신 할 수 있습니다. 따라서 위임 메서드에서는 테스트를 수행 할 수 없습니다. 게다가 (webViewLoaded) webview가로드되지 않는 동안에도 멀티 스레드가 아닌 것 같습니다. 마지막으로 중요한 것은 두 번째 테스트에서 javascript 명령을 수행하며 webViewDidFinishLoad를 호출하지 않습니다. – Julien