Sea*_*lly 51 objective-c ios xctest xcode7 xcode-ui-testing
我正在使用新的Xcode 7 UI测试功能编写UI测试用例.在我的应用程序的某些时刻,我要求用户允许相机访问和推送通知.因此会出现两个iOS弹出窗口:"MyApp Would Like to Access the Camera"
弹出窗口和"MyApp Would Like to Send You Notifications"
弹出窗口.我希望我的测试可以解雇两个弹出窗口.
UI录制为我生成了以下代码:
[app.alerts[@"cameraAccessTitle"].collectionViews.buttons[@"OK"] tap];
Run Code Online (Sandbox Code Playgroud)
但是,[app.alerts[@"cameraAccessTitle"] exists]
解析为false,上面的代码生成错误:Assertion Failure: UI Testing Failure - Failure getting refresh snapshot Error Domain=XCTestManagerErrorDomain Code=13 "Error copying attributes -25202"
.
那么在测试中解除一堆系统警报的最佳方法是什么?系统弹出窗口会中断我的应用程序流并立即使我的正常UI测试用例失败.事实上,任何有关如何绕过系统警报以便我可以恢复测试通常流程的建议都表示赞赏.
这个问题可能与这个SO帖子有关,也没有答案:Xcode7 | Xcode UI测试| 如何处理位置服务警报?
提前致谢.
Joe*_*tti 48
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
从处理程序返回标记为"完成",这意味着它不会再被调用.对于你的情况,我会尝试返回,false
所以第二个警报将再次触发处理程序.
以下将解除Xcode 7 Beta 6中的单个"系统警报":
let app = XCUIApplication()
app.launch()
// trigger location permission dialog
app.alerts.element.collectionViews.buttons["Allow"].tap()
Run Code Online (Sandbox Code Playgroud)
Beta 6为UI测试引入了一系列修复,我相信这是其中之一.
还要注意我-element
直接打电话-alerts
.调用-element
上的XCUIElementQuery
力的框架,选择"唯一"匹配屏幕上的元素.这适用于一次只能显示一个警报的警报.但是,如果您为标签尝试此操作并且有两个标签,则框架将引发异常.
归档时间: |
|
查看次数: |
18348 次 |
最近记录: |