【发布时间】:2026-01-11 21:30:02
【问题描述】:
我正在使用 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
);
奇怪的是,如果我使用小于5秒的allowedTimeToLoadALocalFileInWebView,它就不起作用了,这对于加载本地文件来说是很长的......
此外,稍后,我使用
在 webView 上执行 javascriptstringByEvaluatingJavaScriptFromString:
,我必须等待动画执行,所以我使用相同的代码:
NSDate *restart = [NSDate date];
while ( [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]
&&
(-[restart timeIntervalSinceNow]) < allowedTimeToLoadALocalFileInWebView
);
这需要大约 50 秒! (动画甚至没有持续一秒钟......)
我认为 (-[restart timeIntervalSinceNow])
我也试过用
[NSThread sleepForTimeInterval:allowedTimeToLoadALocalFileInWebView];
但这会导致结果不可见。
你知道为什么加载 webview 需要这么长时间来加载本地文件吗?还有另一种不使用 runMode:beforeDate: 来等待动画的方法?
谢谢
【问题讨论】:
标签: iphone objective-c multithreading automated-tests google-toolbox-for-mac