我希望能够使用UIAutomation来测试应用程序。我遇到的问题是,我需要从网络上下载分配的数据。有没有办法暂停UIAutomation脚本直到发布NSNotification,或者我只需要delay()的时间比我认为下载数据所需的时间更长。等待一段时间并不可取,因为有时数据不需要重新下载。
任何帮助/链接都是非常感谢的。
发布于 2012-06-13 00:56:10
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 + "]")
}
}它不是很漂亮,但它是有效的。
发布于 2012-06-05 07:54:37
UIAutomation有一个很棒的函数,叫做waitForInvalid()。如果你有一个进度条或者其他东西,在数据下载完成后会显示出来,然后将其删除,你可以使用它。
这也适用于用户已经拥有数据而您没有显示UI的情况,因为函数会立即返回。
https://stackoverflow.com/questions/10888613
复制相似问题