问题 以编程方式将应用程序发送到后台


有没有办法将应用程序发送到后台?与你如何打电话类似 XCUIApplication.terminate(),我有一些要测试的UI元素 applicationDidBecomeActive(_:)。有谁知道这是否可能?


1262
2017-11-11 14:44


起源



答案:


我建议退房 XCUIDevice。您可以按下主页按钮,然后重新启动应用程序

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

7
2017-11-15 02:11



适用于iOS模拟器(9.3)和Xcode 7.3。谢谢! - Vish
根据API文档 XCUIApplication.launch() (Xcode 7.3.1),如果应用程序已在运行,则终止该应用程序。我认为它不适合这种情况 - 将应用程序发送到后台然后再次启动它。 - Jeremy Kao


答案:


我建议退房 XCUIDevice。您可以按下主页按钮,然后重新启动应用程序

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

7
2017-11-15 02:11



适用于iOS模拟器(9.3)和Xcode 7.3。谢谢! - Vish
根据API文档 XCUIApplication.launch() (Xcode 7.3.1),如果应用程序已在运行,则终止该应用程序。我认为它不适合这种情况 - 将应用程序发送到后台然后再次启动它。 - Jeremy Kao


我刚试过 UIApplication.sharedApplication().performSelector("suspend") 成功。

dispatch_after(2, dispatch_get_main_queue(), {       
    // suspend the app after two seconds
    UIApplication.sharedApplication().performSelector("suspend")
})

4
2017-11-11 15:00



我试图让这个用于XCode自动UI测试,这应该工作吗?或者这个答案是否适合其他类型的测试? - Liam
@tilo它对我不起作用(Xcode 7.3.1)。 dispatch_after(2,dispatch_get_main_queue(),{//在两秒钟后暂停应用程序UIApplication.sharedApplication()。performSelector(#selector(NSURLSessionTask.suspend))})它是否只是将应用程序置于挂起状态而不是后台状态? - Jeremy Kao
@Liam你有没有找到在UITest做到这一点的方法?我仍然发现这一点,但没有线索:( - Confused


在Xcode 9.0中,Apple推出了 XCUIApplication.activate()activate() 将在必要时启动应用程序,但如果它已在运行,则不会终止它。从而:

func testExample() {
    // Background the app
    XCUIDevice().press(.home)
    // Reactivate the app
    XCUIApplication().launch()
}

3
2017-12-07 06:45