UI测试中如何关闭「是否保存密码」系统Sheet弹窗?
解决Xcode 14.3中密码保存Sheet弹窗的UI测试处理问题
针对你遇到的「是否保存此密码以在应用和网站中使用?」Sheet弹窗无法被常规UIInterruptionMonitor识别的问题,可通过以下两种方案解决:
方案一:调整UIInterruptionMonitor适配Sheet弹窗
修改监控逻辑,不再局限于alert类型元素,直接检查目标按钮是否存在:
addUIInterruptionMonitor(withDescription: "Password Save Sheet") { _ in let notNowButton = app.scrollViews.otherElements.buttons["Not now"] guard notNowButton.exists else { return false } notNowButton.tap() // 点击后触发app激活,确保后续流程正常 app.tap() return true } // 注意:在可能触发弹窗的操作后,需调用app.tap()触发监控生效 app.tap()
此方案会自动拦截弹窗,无需在每个测试步骤中重复编写处理逻辑。
方案二:在测试流程中主动检查并处理弹窗
在触发密码保存的操作后,主动检查按钮是否存在并点击:
// 执行触发密码保存的操作(例如登录/注册) // ... // 等待弹窗出现并处理 let notNowButton = app.scrollViews.otherElements.buttons["Not now"] if notNowButton.waitForExistence(timeout: 5) { notNowButton.tap() app.tap() // 恢复app活跃状态 }
这种方式更灵活,适合仅在特定测试场景中出现弹窗的情况。
注意事项
- 确保按钮文本完全匹配:iOS系统弹窗的按钮文本可能因系统版本/语言不同存在大小写差异,以Xcode录制工具获取的
"Not now"为准。 - 调用
app.tap():弹窗出现后App会处于非活跃状态,触发一次轻触操作可激活App并确保监控或后续测试步骤正常执行。
内容的提问来源于stack exchange,提问作者chiarotto.alessandro
相关产品推荐
相关产品推荐

