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

时间:2017-01-31 07:05:07

标签: background xctest launch xcode-ui-testing suspend

我想让我的应用程序转到后台,然后回到前台。

要使应用程序转到后台:XCUIDevice.shared().press(XCUIDeviceButton.home)

要终止应用(强制点按):XCUIApplication().terminate()

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

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

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

4 个答案:

答案 0 :(得分:8)

从Xcode 9和iOS 11开始,XCUIApplication()activate()方法可用于重新启动应用。

正如勃兰登人所说,你可以按"主页按钮来设置应用程序,然后再次激活它以避免使用Siri:

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

我已经关注了@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")
}

答案 3 :(得分:0)

在这里提出并回答了类似的问题 Possible to bring the app from background to foreground?

这就是我的 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. }