如何使用UIAutomation处理慢速网络连接

时间:2013-03-12 16:46:31

标签: ios ui-automation ios-ui-automation

我注意到当网络速度很慢时,我的所有UI测试都会失败。例如,用户会尝试登录,然后下一个屏幕加载速度不够快,以便在屏幕上显示另一个UIElement。

如何在不使用延迟()的情况下处理慢速网络连接?

3 个答案:

答案 0 :(得分:0)

你一定要看看多线程。处理网络连接时,在辅助线程中进行所有此处理。如果没有,主线程将被阻止,应用程序将无法响应用户。

多线程是一个非常大的主题。我建议您开始查看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.

    });
});

答案 1 :(得分:0)

我知道的唯一方法是使用延迟。从互联网上加载东西时,我通常会有一个活动指示器。所以我在活动指示器显示时添加延迟

while (activityIndicator.isVisible())
{
    UIALogger.logMessage("Loading");
    UIATarget.localTarget().delay(1);
} 

答案 2 :(得分:0)

查看pushTimeout中的popTimeoutUIATarget方法。您可以找到文档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();