Is there a way to send the application to background? Similarly to how you can call XCUIApplication.terminate()
, I have some UI Elements to test on applicationDidBecomeActive(_:)
. Does anyone know if this is at all possible?
Programmatically sending an app to background
Asked Answered
I would recommend checking out XCUIDevice
. Here is how you might press the home button and then relaunch the application
func testExample() {
// Has a nav bar.
XCTAssert(XCUIApplication().navigationBars.element.exists)
XCUIDevice().press(XCUIDeviceButton.home)
// Before Swift 3: XCUIDevice().pressButton(XCUIDeviceButton.Home)
XCUIApplication().launch()
// Navigationbar still there on second launch.
XCTAssert(XCUIApplication().navigationBars.element.exists)
}
Works well with iOS Simulator (9.3) and Xcode 7.3. Thanks! –
Naturalist
According to the API documentation of
XCUIApplication.launch()
(Xcode 7.3.1), it TERMINATE the application if it is already running. I think it is not suitable for this case - send the application to background and then bring it up again. –
Peraea In my case I wanted to background the app and open it where I previously left it. To background the app:
XCUIDevice.shared.press(.home)
To re-open the app where I left it:
XCUIApplication().activate()
Re-launching the app using XCUIApplication().launch()
would launch the app from new.
I am using Swift 4.2
I just tried UIApplication.sharedApplication().performSelector("suspend")
successfully.
dispatch_after(2, dispatch_get_main_queue(), {
// suspend the app after two seconds
UIApplication.sharedApplication().performSelector("suspend")
})
// Swift 4 version
UIApplication.shared.perform(Selector("suspend"))
I am trying to get this to work for XCode Automated UI Tests, should this work? Or is this answer appropriate for another type of testing? –
Bunde
@Dogcart It doesn't work for me (Xcode 7.3.1). dispatch_after(2, dispatch_get_main_queue(), { // suspend the app after two seconds UIApplication.sharedApplication().performSelector(#selector(NSURLSessionTask.suspend)) }) Does it simply put the app into suspend state, instead of background state? –
Peraea
@Bunde Have you found the way to do this in UITest? I still finding on this, but no clue :( –
Sot
In Xcode 9.0, Apple introduced XCUIApplication.activate()
. activate()
will launch the application if necessary, but will not terminate it if it is already running. Thus:
func testExample() {
// Background the app
XCUIDevice().press(.home)
// Reactivate the app
XCUIApplication().activate()
}
© 2022 - 2024 — McMap. All rights reserved.