我正在寻找解决问题的方法,我需要将我的应用程序发送到后台并在特定时间间隔后重新启动它。 deactivateAppForDuration()用于在仪器UIAutomation中实现这一点。 有人知道如何在XCTest中实现这一目标吗?
答案 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()
更改为所需的持续时间。