将应用程序发送到后台并从XCTest中的最近重新启动它

时间:2016-11-17 11:11:45

标签: ios swift ui-automation xctest xctestcase

我正在寻找解决问题的方法,我需要将我的应用程序发送到后台并在特定时间间隔后重新启动它。 deactivateAppForDuration()用于在仪器UIAutomation中实现这一点。 有人知道如何在XCTest中实现这一目标吗?

2 个答案:

答案 0 :(得分:6)

如果这样可行,那就不是肯定的,因为我还没有测试过它,但它值得一试。如果不出意外,它应该让你知道在哪里看。

XCUIApplication类提供了以编程方式终止和启动应用的方法:https://developer.apple.com/reference/xctest/xcuiapplication

XCUIDevice类可让您模拟设备上的按键:https://developer.apple.com/reference/xctest/xcuidevicebutton

您可以将这些与 UIControl NSURLSessionTask 一起使用来暂停您的应用。

使用 Swift 3 的这个过程的示例可能看起来像这样(Swift 2及以下语法可能略有不同):

func myXCTest() {

    UIControl().sendAction(#selector(NSURLSessionTask.suspend), to: UIApplication.shared(), for: nil)

    Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(launchApp), userInfo: nil, repeats: false)   
}

func launchApp() {
    XCUIApplication().launch()
}

另一种方法可能是简单地按下主页按钮,然后在计时器通过后重新启动应用程序:

func myXCTest {

    XCUIDevice().press(XCUIDeviceButton.Home)

    Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(launchApp), userInfo: nil, repeats: false)     
}

这些方式都不能满足您的要求或完美运作,但希望它能为您提供一个起点。您可以使用它并找到适合您的解决方案。祝你好运!

答案 1 :(得分:2)

如果你可以在当前的测试中使用Xcode 8.3和iOS 10.3,那么你可能想尝试这个:

XCUIDevice.shared().press(XCUIDeviceButton.home)
sleep(60)
XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {appName}")

请务必在测试套件文件的顶部添加@available(iOS 10.3, *)

这相当于deactivateAppForDuration()。只需将sleep()更改为所需的持续时间。