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

Lia*_*iam 12 ios swift xcode-ui-testing

有没有办法将应用程序发送到后台?与您可以调用的方式类似XCUIApplication.terminate(),我有一些要测试的UI元素applicationDidBecomeActive(_:).有谁知道这是否可能?

JMF*_*MFR 8

我建议退房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)
}
Run Code Online (Sandbox Code Playgroud)

  • 根据[`XCUIApplication.launch()`](http://masilotti.com/xctest-documentation/Classes/XCUIApplication.html#//api/name/launch)(Xcode 7.3.1)的API文档,它如果应用程序已在运行,请终止该应用程序.我认为它不适用于这种情况 - 将应用程序发送到后台然后重新启动它. (6认同)

a.a*_*ani 7

就我而言,我想将应用程序置于后台并在之前放置的位置打开它。要将应用程序置于后台:

XCUIDevice.shared.press(.home)
Run Code Online (Sandbox Code Playgroud)

要重新打开我离开的应用程序:

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

使用重新启动应用程序XCUIApplication().launch()将从新启动应用程序。

我正在使用 Swift 4.2


til*_*ilo 5

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

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"))
Run Code Online (Sandbox Code Playgroud)


rav*_*ron 5

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

func testExample() {
    // Background the app
    XCUIDevice().press(.home)
    // Reactivate the app
    XCUIApplication().launch()
}
Run Code Online (Sandbox Code Playgroud)