有没有一种方法可以将应用程序发送到后台?类似于您可以调用XCUIApplication.terminate()
,我有一些要在applicationDidBecomeActive(_:)
上测试的UI元素。有人知道这是否有可能吗?
有没有一种方法可以将应用程序发送到后台?类似于您可以调用XCUIApplication.terminate()
,我有一些要在applicationDidBecomeActive(_:)
上测试的UI元素。有人知道这是否有可能吗?
我建议查看XCUIDevice
。以下是如何按Home按钮,然后重新启动应用程序的示例:
我建议您查看XCUIDevice
。以下是一个例子,演示如何按下Home按钮,然后重新启动应用程序。
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)
}
我的情况是我想将应用程序后台运行,并在我上一次离开的地方重新打开它。要将应用程序放入后台:
XCUIDevice.shared.press(.home)
重新打开我上次使用的应用程序:
XCUIApplication().activate()
使用 XCUIApplication().launch()
重新启动应用程序将会从头开始启动应用程序。
我正在使用Swift 4.2
我刚刚成功地尝试了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"))
dispatch_after(2, dispatch_get_main_queue(), {
// suspend the app after two seconds
UIApplication.sharedApplication().performSelector(#selector(NSURLSessionTask.suspend))
})
它只是将应用程序置于暂停状态,而不是后台状态吗? - Jeremy KaoXCUIApplication.activate()
。 activate()
会在需要时启动应用程序,但如果应用程序已经在运行,则不会终止它。因此:func testExample() {
// Background the app
XCUIDevice().press(.home)
// Reactivate the app
XCUIApplication().activate()
}
XCUIApplication.launch()
(Xcode 7.3.1)的API文档,如果应用程序已在运行,则该方法将终止该应用程序。我认为这对于此情况不适合 - 最好让应用程序进入后台,然后再将其重新启动。 - Jeremy Kao