我希望能够使用UIAutomation来测试应用。我遇到的问题是,我需要从网络下载分配数据。有没有办法暂停UIAutomation脚本,直到发布NSNotification,或者我只需要delay()
超过我认为下载数据所需的时间。等待一段时间不是优选的,因为有时数据不需要重新下载。
非常感谢任何帮助/链接。
答案 0 :(得分:2)
UIAutomation有一个叫做waitForInvalid()
的漂亮功能。如果您有一个进度条或某些内容会显示,然后在下载完数据后删除,您可以使用它。
这也适用于用户已经拥有数据并且您没有显示UI的情况,因为该功能会立即返回。
答案 1 :(得分:1)
Jack的答案适用于大多数细节,但有些网络工作发生在后台队列中,并且没有进度指示器。
我最后编写了一个帮助器,将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 + "]")
}
}
它不漂亮但它有效。