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

▼魔方 西西 提交于 2019-12-07 03:01:24

问题


I want to make my app to go to background, and then comeback to the foreground.

To make an app to go background: XCUIDevice.shared().press(XCUIDeviceButton.home)

To terminate an app(force tap): XCUIApplication().terminate()

To launch the app: XCUIApplication().launch()

Problem: when I try to close and open the app, the launch() method clears the app from background and it opens the app freshly.

I saw this comment regarding this. But cant able to figure out it in UI test. I'm using Swift. Help needed!!


回答1:


As of Xcode 9 and iOS 11, XCUIApplication() has an activate() method that you can use to relaunch the app.

As brandenbyers suggested, you can "press" the home button to background your app, and then activate it again like this to avoid using Siri:

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

Note that this only works with targets built using XCUITest, not XCTest. If you try this within a target built from XCTest, all XCUIApplication operations will crash.




回答2:


As of Xcode 8.3 and iOS 10.3, it is now possible to relaunch your backgrounded app with Siri!

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

Be sure to include @available(iOS 10.3, *) at the top of your test suite file.




回答3:


I have follow what @randenbyers mentioned on simulator. Before that I have manually activated Siri Service.

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")
}



回答4:


A similar question was asked and answered here Possible to bring the app from background to foreground?

This is what I have in my XCUITest and it works like a charm (xcode 10.1 and test device is 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. }


来源:https://stackoverflow.com/questions/41951539/xctest-ui-testing-how-to-close-and-open-an-app-without-relaunch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!