Bas*_*ian 2 ui-testing uialertcontroller xcode7 xcode-ui-testing
我有一个UI测试,涉及解雇系统生成UIAlertController.此警报要求用户访问设备日历的权限.测试的目标是点击OK按钮后的行为:
1 let app = XCUIApplication()
...
// this code was basically generated by the recording feature of XCode 7
2 app.alerts.elementBoundByIndex(0).collectionViews.buttons["OK"].tap()
Run Code Online (Sandbox Code Playgroud)
现在,OK第2行不是点击按钮,而是让模拟器点击第一个按钮,该Cancel按钮恰好是按钮......
此外,我发现测试框架无法准确识别出现的警报.因此,如果我检查当前的警报计数,我总是得到0:
// ...tap...
let count = app.alerts.count // == 0
Run Code Online (Sandbox Code Playgroud)
如果我使用NSPredicate条件并等待几秒钟,也会发生这种情况.
UI测试是否可能无法与系统生成的警报一起可靠地工作?我正在使用XCode 7.0.1.
Xcode 7.1最终修复了系统警报的问题.然而,有两个小陷阱.
首先,您需要在显示警报之前设置"UI Interuption Handler".这是告诉框架如何在出现警报时处理警报的方式.
其次,在显示警报后,您必须与界面进行交互.只需点击应用程序就可以正常工作,但这是必需的.
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
Run Code Online (Sandbox Code Playgroud)
"位置对话框"只是一个字符串,可帮助开发人员识别访问哪个处理程序,而不是特定于警报类型.我相信true从处理程序返回标记为"完成",这意味着它不会再被调用.
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |