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

Posted

技术标签:

【中文标题】XCUITest 到后台应用程序返回错误的 XCUIApplication.State【英文标题】:XCUITest to background the app is returning the wrong XCUIApplication.State 【发布时间】:2020-07-16 10:08:28 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

更换...

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

与...

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

已解决问题。

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

【讨论】:

【参考方案2】:

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 异步返回结果。阅读更多讨论 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

【讨论】:

以上是关于XCUITest 到后台应用程序返回错误的 XCUIApplication.State的主要内容,如果未能解决你的问题,请参考以下文章

更新到 Xcode 10 后 XCUITest 的测试目标似乎不起作用

无法在 Swift 4 上的 XCUITest 中设置设备方向

带有 PACT 的 XCUITest 不返回模拟网络响应

在 XCUITest 中获取 Button 状态

运行 XCUITest 时出现 dyld 致命错误

XCode9:XCUITest 给出 Runner UIAccessibility 错误