可以将应用程序从后台带到前台吗?

Pis*_*ete 14 ios swift xcode7 xcode-ui-testing

运行XCT UI测试时,可以在后台运行正在测试的应用程序:

XCUIDevice().pressButton(XCUIDeviceButton.Home)
Run Code Online (Sandbox Code Playgroud)

它可以以某种方式将应用程序恢复到前台(活动状态)而无需重新启动应用程序?

Cha*_*and 7

Xcode 9更新:从Xcode 9开始,您现在可以简单地activate()在任何XCUIApplication上调用。

let myApp = XCUIApplication()
myApp.activate() // bring to foreground
Run Code Online (Sandbox Code Playgroud)

https://developer.apple.com/documentation/xctest/xcuiapplication/2873317-activate


是的。但是,你需要XCUIElement的私有头(它通过头部转储可从Facebook 这里)。为了使应用程序前台化,您需要调用resolve,我相信它可以解决元素的查询(对于应用程序而言,这意味着前台应用程序)。

对于Swift,您必须将XCUIElement.h导入到桥接头文件中。对于Objective-C,您只需导入XCUIElement.h。

将应用程序作为背景:

迅速:

XCUIApplication().resolve()
Run Code Online (Sandbox Code Playgroud)

目标C

[[XCUIApplication new] resolve];
Run Code Online (Sandbox Code Playgroud)

如果这是您唯一需要的功能,则只需编写一个快速的ObjC类别。

@interface XCUIElement (Tests)
- (void) resolve;
@end
Run Code Online (Sandbox Code Playgroud)

如果您需要启动/解析另一个应用程序。通过跳板,Facebook在这里有一个例子。


bra*_*ers 5

从 Xcode 8.3 和 iOS 10.3 开始,您可以使用 Siri 完成此操作:

XCUIDevice.shared().press(XCUIDeviceButton.home)
XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {appName}")
Run Code Online (Sandbox Code Playgroud)

包含@available(iOS 10.3, *)在您的测试套件文件的顶部,您应该很高兴!