9

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

4

2 回答 2

7

由于我还没有测试过它是否会起作用,所以不确定,但值得一试。如果没有别的,它应该给你一个关于在哪里看的好主意。

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

XCUIDevice 类允许您模拟设备上的按钮按下:https ://developer.apple.com/reference/xctest/xcuidevicebutton

您可以将它们与UIControlNSURLSessionTask一起使用来暂停您的应用程序。

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

这两种方法都不能满足您的要求,也不能完美地工作,但希望它能给您一个起点。您可以使用它并找到适合您的解决方案。祝你好运!

于 2016-11-27T09:34:02.463 回答
3

如果您可以在当前测试中使用 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()为您想要的持续时间。

于 2017-03-27T23:07:34.460 回答