XCTest UI 测试 - 如何在不重新启动的情况下关闭和打开应用程序?

XCTest UI Testing - How to close and open an app without relaunch?

我想让我的应用进入后台,然后再回到前台。

要让应用进入后台:XCUIDevice.shared().press(XCUIDeviceButton.home)

终止应用程序(强制点击):XCUIApplication().terminate()

启动应用程序:XCUIApplication().launch()

问题:当我尝试关闭和打开应用程序时,launch() 方法从后台清除应用程序并重新打开应用程序。

我看到这个 关于这个。但是无法在 UI 测试中弄清楚。我正在使用 Swift。需要帮助!!

从 Xcode 8.3 和 iOS 10.3 开始,现在可以使用 Siri 重新启动后台应用程序!

XCUIDevice.shared().press(XCUIDeviceButton.home)
XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {appName}")

请务必在测试套件文件的顶部包含 @available(iOS 10.3, *)

我已经按照@randenbyers 在模拟器上提到的内容进行了操作。 在此之前,我已经手动激活了 Siri 服务。

XCUIDevice.shared().press(XCUIDeviceButton.home)
if #available(iOS 10.3, *) {
    XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {Writer}")
    XCTAssertTrue(XCUIApplication().tabBars.buttons["My Projects"].exists)
} else {
    app.scrollViews.otherElements.buttons["Log Out"].tap()
    assertionFailure("Fail because Siri service is not activated")
}

从 Xcode 9 和 iOS 11 开始,XCUIApplication() 有一个 activate() 方法可以用来重新启动应用程序。

正如 brandenbyers 所建议的,您可以 "press" 主页按钮将您的应用设置为背景,然后像这样再次激活它以避免使用 Siri:

XCUIDevice.shared.press(.home)
XCUIApplication().activate()

请注意,这仅适用于使用 XCUITest 而不是 XCTest 构建的目标。如果您在从 XCTest 构建的目标中尝试此操作,所有 XCUIApplication 操作都会崩溃。

这里提出并回答了类似的问题

这就是我的 XCUITest 中的内容,它非常有用(xcode 10.1,测试设备是 iPhone X 11.0)

func testWhatever() {

// You test steps go here until you need the background foreground to run
// To background the app 
XCUIDevice.shared.press(XCUIDevice.Button.home) 
// To bring the app back
XCUIApplication().activate() 

// You test continues after background foreground has been done. }