Xcode 7.1
Xcode 7.1 终于解决了系统警报的问题。然而,有两个小问题。
首先,您需要在呈现警报之前设置“UI 中断处理程序”。这是我们告诉框架如何处理出现的警报的方式。
其次,呈现警报后,您必须与界面进行交互。只需点击应用程序即可正常工作,但这是必需的。
addUIInterruptionMonitorWithDescription("Location Dialog") { (alert) -> Bool in
alert.buttons["Allow"].tap()
return true
}
app.buttons["Request Location"].tap()
app.tap() // need to interact with the app for the handler to fire
“位置对话框”只是一个字符串,用于帮助开发人员识别访问了哪个处理程序,它并不特定于警报类型。
我相信回归true
来自处理程序的将其标记为“完成”,这意味着它不会再次被调用。对于你的情况我会尝试返回false
因此第二个警报将再次触发处理程序。
Xcode 7.0
以下内容将消除 Xcode 7 Beta 6 中的单个“系统警报”:
let app = XCUIApplication()
app.launch()
// trigger location permission dialog
app.alerts.element.collectionViews.buttons["Allow"].tap()
Beta 6 引入了一系列 UI 测试修复,我相信这就是其中之一。
另请注意,我正在打电话-element
直接在-alerts
。呼唤-element
on an XCUIElementQuery
强制框架选择屏幕上“唯一”的匹配元素。这对于一次只能显示一个警报的情况非常有用。但是,如果您尝试对一个标签执行此操作并且有两个标签,则框架将引发异常。