在我的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
之前发生)
我该如何解决这个问题?
答案 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"]
来关闭对话框。