我正在使用 Google Toolbox for Mac 来测试我的应用程序。我正在进行的测试检查当发生抖动事件时,专用控制器会向 webview 发送消息,以及 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 上使用
stringByEvaluatingJavaScriptFromString:
,并且我必须等待执行动画,所以我使用相同的代码:
NSDate *restart = [NSDate date];
while ( [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]
&&
(-[restart timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView
);
这需要大约 50 秒!(动画甚至没有持续一秒钟......)
我认为 (-[restart timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView 没有用,因为在第二种情况下,runMode:beforeDate: 比我的 allowedTimeToLoadALocalFileInWebView 花费的时间似乎更多。
我也尝试使用
[NSThread sleepForTimeInterval:allowedTimeToLoadALocalFileInWebView];
但这会阻止结果可见。
你知道为什么加载 webview 需要这么长时间来加载本地文件吗?还有另一种不使用 runMode:beforeDate: 来等待动画的方法?
谢谢