0

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

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

4

2 回答 2

2

UIAutomation 有一个漂亮的函数,叫做waitForInvalid(). 如果您有一个进度条或将在数据下载完成后显示然后删除的东西,您可以使用它。

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

于 2012-06-04T23:54:37.483 回答
1

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

我最终编写了一个将CGRectZeroUIView 粘贴到元素中的助手。然后我们可以等到这个元素变得有效。它不像我希望的那样干净,但它正在醒来。

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-12T16:56:09.993 回答