关闭位置服务请求对话框

时间:2017-09-18 09:57:36

标签: ios swift xcode-ui-testing

在我的UI测试开始时我有

addUIInterruptionMonitor(withDescription: "Location Dialog") { (alert) -> Bool in
    let button = alert.buttons["Allow"]
    if button.exists {
        snapshot("request location service")
        button.tap()
        return true
    }
    return false
}

应该关闭位置服务请求对话框,但它什么都不做,它永远不会到达处理程序。我还尝试在setUp()中设置此代码,但它也无法正常工作。

我认为问题可能是应用程序中发生的第一件事是对话框正在显示,可能太早了(可能会在调用addUIInterruptionMonitor之前发生)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

添加UIInterruptionMonitor后,您必须立即与应用程序进行交互。这可以是一个简单的点击:

addUIInterruptionMonitor(withDescription: "Location Dialog") { (alert) -> Bool in
   let button = alert.buttons["Allow"]
   if button.exists {
   button.tap()
      return true
   }
   return false
}
// interact with the app
app.tap()

如果app.tap()干扰您的测试,您也可以使用app.swipeUp()

请注意, iOS11 中的位置服务权限对话框已更改。现在有3个按钮,因此您必须使用alert.buttons["Always Allow"]来关闭对话框。

enter image description here