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. }
我想让我的应用进入后台,然后再回到前台。
要让应用进入后台:XCUIDevice.shared().press(XCUIDeviceButton.home)
终止应用程序(强制点击):XCUIApplication().terminate()
启动应用程序:XCUIApplication().launch()
问题:当我尝试关闭和打开应用程序时,launch() 方法从后台清除应用程序并重新打开应用程序。
我看到这个
从 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. }