避免在 XCTest UI 测试中恢复应用程序状态

Posted

技术标签:

【中文标题】避免在 XCTest UI 测试中恢复应用程序状态【英文标题】:avoiding app state restoration in XCTest UI Testing 【发布时间】:2020-02-03 18:19:03 【问题描述】:

我正在为基于文档的 macOS 应用程序编写 UI 测试。

测试通过单击启动屏幕窗口中的按钮打开一个模板文档(很像“欢迎使用 Xcode”窗口)。这适用于第一次测试运行。但是由于之前打开的文档覆盖了初始屏幕窗口,因此后续启动会因状态恢复而受阻。

如何在运行 Xcode UI 测试时禁用状态恢复?

我在我的应用程序目标中禁用了状态恢复(“启动应用程序而不恢复状态”),效果很好。但这不会延续到测试目标,即使选中“使用运行操作的参数和环境变量”也是如此。

我也尝试在测试结束时关闭之前打开的文档,但是当我在保存对话框中单击“删除副本”时,“记录 UI 测试”没有记录任何内容。

【问题讨论】:

您希望何时清理应用状态? 【参考方案1】:

这在测试的setUp 函数中起到了作用:

let app = XCUIApplication()
app.launchArguments.append(contentsOf: ["-ApplePersistenceIgnoreState", "YES"])
app.launch()

您也可以直接在命令行上附加等效参数,例如:

/Applications/Example.app/Contents/MacOS/example -ApplePersistenceIgnoreState YES

【讨论】:

以上是关于避免在 XCTest UI 测试中恢复应用程序状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XCTest 框架的 UI 测试中测试数据?

XCTest:在 UI 测试类的 NSUserdefaults 中未检索到值

在 XCTest UI 测试中单击 NSToolbarItem

iOS 中的 XCTest 和 UI 测试

XCTest:UI测试类中的NSUserdefaults中未检索到的值

XCTest 中的测试通知(UI 测试)