When running an XCT UI test it is possible to put the application under test in the background with:
XCUIDevice().pressButton(XCUIDeviceButton.Home)
It it possible in some way to bring the app back to foreground (active state) without relaunching the application?
Update for Xcode 9: Starting in Xcode 9, you can now simply call
activate()
on any XCUIApplication.https://developer.apple.com/documentation/xctest/xcuiapplication/2873317-activate
Yes, it is. But, you'll need XCUIElement's private headers (which are available via header dump from Facebook here). In order to foreground the app, you need to call resolve which I believe resolves the element's query (which for applications means foregrounding the app).
For Swift, you'll have to import the XCUIElement.h into your bridging header. For Objective-C you'll just need to import XCUIElement.h.
With the app backgrounded:
Swift:
Objective-C
If this is the only functionality you need, you could just write a quick ObjC category.
If you need to launch / resolve another app. Facebook has an example of that here by going through the Springboard.
As of Xcode 8.3 and iOS 10.3, you can accomplish this with Siri:
Include
@available(iOS 10.3, *)
at the top of your test suite file and you should be good to go!For Swift, you need to declare the XCUIApplication private methods interface in Brigding-Header.h like this:
Then call resolve() in your test cases to bring the app back:
If somebody needs just move app back from background i have written (based on answer above) category that really works(great thanks to pointing to FB git)