2012-06-04 54 views
0

我想能够使用UIAutomation来测试应用程序。我遇到的问题是,我需要从网络下载所有数据。有没有办法暂停UIAutomation脚本,直到发布NSNotification,或者我只需要比我认为下载数据所需的时间长delay()。等待一定的时间不是优选的,因为有时数据不需要重新下调。UIAutomation和NSNotification

任何帮助/链接非常感谢。

回答

1

杰克的答案适用于大多数细节,但一些网络工作发生在后台队列上,并且没有进度指示器。

我写了一个帮助器,将一个CGRectZero UIView粘贴到一个元素中。然后我们可以等到这个元素变得有效。它不像我希望的那样干净,但是它是在开玩笑。

waitForElementNamed: function(name, element, timeout) { 
    timeout = timeout || 10 
    log("Waiting for " + timeout + " seconds") 
    var valid = false 
    for (var i = 0; i < timeout; i++) { 
     UIATarget.localTarget().pushTimeout(.5) 
     valid = element.elements()[name].isValid() 
     if (valid) { 
     log("Found Element " + name) 
     return 
     } 
     UIATarget.localTarget().popTimeout() 
     target.delay(.5) 
    } 
    if (!valid) { 
     failed("Wait Timedout [" + timeout + "]") 
    } 
} 

这不是很漂亮,但它的工作原理。

+0

是的,不漂亮,但它的工作:) –

2

UIAutomation有一个叫做waitForInvalid()的漂亮功能。如果你有一个进度条或者什么东西会在数据完成下载后显示并删除,你可以使用它。

这也适用于用户已经拥有数据并且不显示用户界面的情况,因为函数会立即返回。