我注意到,当网络速度很慢时,我的所有UI测试失败。例如,用户会尝试登录,然后下一个屏幕的加载速度不够快,以使另一个UIElement出现在屏幕上。如何处理与UIAutomation的慢速网络连接
如何在不使用延迟()的情况下处理较慢的网络连接?
我注意到,当网络速度很慢时,我的所有UI测试失败。例如,用户会尝试登录,然后下一个屏幕的加载速度不够快,以使另一个UIElement出现在屏幕上。如何处理与UIAutomation的慢速网络连接
如何在不使用延迟()的情况下处理较慢的网络连接?
你绝对应该看看多线程。在处理网络连接时,您应该应该在辅助线程中完成所有这些处理。如果没有,主线程将被阻止,应用程序将无法响应用户。
多线程是一个非常大的主题。我建议你为此开始寻找Apple's reference。你也可以参考a great course on iTunes U(讲座11)。
如果你只是想给它一个镜头,这里的实际代码(类似),你将需要:
dispatch_queue_t newQueue = dispatch_queue_create("networkQueue", NULL);
dispatch_async(newQueue, ^{
// here you need to call the networking processes
dispatch_async(dispatch_get_main_queue(), ^{
// if you need to update your UI, you need to get back to the main queue.
// This block will be executed in your main queue.
});
});
的唯一途径,我知道正在使用的延迟。从互联网上加载东西时,我通常会有一个活动指示器。所以,我想补充的延迟而活动指示灯显示
while (activityIndicator.isVisible())
{
UIALogger.logMessage("Loading");
UIATarget.localTarget().delay(1);
}
退房在UIATarget
pushTimeout
和popTimeout
方法。你可以找到文档here。
这里是我们的iOS应用UIAutomation测试一个代码示例:
// Tap "Post" button, which starts a network request
mainWindow.buttons()["post.button.post"].tap();
// Wait for maximum of 30 seconds to "OKAY" button to be valid
target.pushTimeout(30);
// Tap the button which is shown from the network request success callback
mainWindow.buttons()["dialog.button.okay"].tap();
// End the wait scope
target.popTimeout();
是啊,我相当好与GCD熟悉,我们做实现后台线程所有的网络电话,然而,问题在于我的自动化代码正在屏幕上寻找UIElement,并且目前尚未显示。 举一个例子,说你要加载一个充满文本的屏幕,但你有一个微调,直到文本加载。我希望我的自动化代码能够等待文本加载,但我不想使用target.delay() – codeRefiner 2013-03-12 20:45:06
可以使用什么来代替target.delay()?它似乎阻止了应用程序的主线程。 – 2015-01-08 19:34:31
@maremmle我知道这已经有一段时间了,但我只是发布了一个新的答案,解释了我们如何等待UIAutomation测试中的网络/其他后台任务以防万一。 – lekksi 2015-10-08 19:08:42