应用程序后台 XCUITest 返回错误 XCUIApplication.State

XCUITest to background the app is returning the wrong XCUIApplication.State

我有一个 XCUITest 需要将应用程序置于后台。我的理解是,当按下主页按钮时,应用程序将进入后台,我将其编码为:

XCUIDevice.shared.press(.home)
sleep(2)
XCTAssertEqual(app.state, .runningForeground)

但是,正如断言所述,该应用似乎 运行 在前台。这是我的错误实施吗?

正在替换...

sleep(5)
XCTAssertEqual(app.state, .runningForeground)

与...

let background = app.wait(for: .runningBackground, timeout: 5)
XCTAssertTrue(background)

已解决问题。

我想我必须明确地等待预期的状态发生。

iOS 应用程序不会立即进入后台——它们有时间保存数据以防应用程序将来被终止。 https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background

此外 .state returns 结果是异步的。在讨论中阅读更多内容 https://developer.apple.com/documentation/xctest/xcuiapplication/2877401-state

这就是您应该像在自己的答案中那样使用 wait 函数的原因 https://developer.apple.com/documentation/xctest/xcuiapplication https://developer.apple.com/documentation/xctest/xcuiapplication/2921487-wait