【问题标题】:Wait for App to idle after Interruption中断后等待App空闲
【发布时间】:2016-04-07 20:42:14
【问题描述】:

我有一个 ViewController,它将通过初始化请求访问位置服务

if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined)
{
    [_locationManager requestWhenInUseAuthorization];
}

这会触发“允许应用在您使用应用时访问您的位置吗?”-警报。

我使用[self addUIInterruptionMonitorWithDescription:handler:] 对此作出反应。我遇到以下问题:关闭请求对话框后,ui-test 没有继续。警报被解除,但 Xcode 等待应用程序空闲,但看起来应用程序 空闲:

t =    67.35s             Wait for app to idle

测试失败,因为应用卡在这里。如果我进入模拟器,Xcode 会记录。

t =    72.27s         Synthesize event

并继续测试。

Xcode 尝试等待应用程序有什么原因吗?一种解决方法似乎是告诉 Xcode UI 已更改或发生了事件。有没有办法触发这个?

【问题讨论】:

  • 附加信息:关闭推送通知警报确实可以正常工作......

标签: xcode7 xcode-ui-testing


【解决方案1】:

呈现警报后,您必须与界面交互。这是 Xcode 7.2 的一个已知错误。只需点按应用即可,但这是必需的。

addUIInterruptionMonitorWithDescription("Location Dialog") { (alert) -> Bool in
    alert.buttons["Allow"].tap()
    return true
}

app.buttons["Find Games Nearby?"].tap()
app.tap() // need to interact with the app for the handler to fire
XCTAssert(app.staticTexts["Authorized"].exists)

更多信息请参见my blog post

【讨论】:

  • 感谢您的帮助。其实我之前就知道你的博文,也试过用这个,但是在中断监听之后,tap就不行了,因为Xcode认为,app不是空闲的。测试将失败并显示“UI 测试失败 - 应用程序无法在 30 秒内停止”
  • 有趣。听起来您的应用程序中可能发生了其他事情,导致框架认为它没有响应。该方法中是否发生了其他任何事情,可能在主线程上?
  • 我在 viewControllers 的初始化中请求许可。在等待时,一个 MKMapSnapshot 完成(在给定的坐标上,而不是用户的位置上)并添加到 UITableView。然后重新加载 TableView。 Refresh 控件已停止。然后用户/测试点击“允许”,焦点返回到 ViewController。
  • 由于用户位置不是一个重要功能,我最终在使用此方法运行 UI 测试时删除了对话框:stackoverflow.com/a/33038143/1315242
猜你喜欢
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 2020-11-21
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多