gpt4 book ai didi

ios - Xcode 7 UI 测试 : how to dismiss a series of system alerts in code

转载 作者:IT老高 更新时间:2023-10-28 11:34:18 25 4
gpt4 key购买 nike

我正在使用新的 Xcode 7 UI 测试功能编写 UI 测试用例。在我的应用程序的某个时刻,我要求用户授予相机访问权限和推送通知。因此会出现两个 iOS 弹出窗口:“MyApp 想要访问相机” 弹出窗口和 “MyApp 想要向您发送通知” 弹出窗口。我希望我的测试消除两个弹出窗口。

UI 录制为我生成了以下代码:

[app.alerts[@"cameraAccessTitle"].collectionViews.buttons[@"OK"] tap];

但是,[app.alerts[@"cameraAccessTitle"] exists] 解析为 false,上面的代码会产生错误:Assertion Failure: UI Testing Failure - Failure getting refresh snapshots错误 Domain=XCTestManagerErrorDomain Code=13“复制属性时出错 -25202”

那么在测试中消除一堆系统警报的最佳方法是什么?系统弹出窗口会中断我的应用程序流程并立即使我的正常 UI 测试用例失败。事实上,任何关于如何绕过系统警报以便我可以恢复测试通常流程的建议都值得赞赏。

这个问题可能与这个没有答案的 SO 帖子有关:Xcode7 | Xcode UI Tests | How to handle location service alert?

提前致谢。

最佳答案

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 测试的修复,我相信这就是其中之一。

另外请注意,我直接在 -alerts 上调用 -element。在 XCUIElementQuery 上调用 -element 会强制框架选择屏幕上的“唯一”匹配元素。这对于您一次只能看到一个的警报非常有用。但是,如果您尝试对一个标签执行此操作并且有两个标签,则框架将引发异常。

关于ios - Xcode 7 UI 测试 : how to dismiss a series of system alerts in code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com