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

问题描述 投票:0回答:3

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

ios swift ui-automation xctest xctestcase
3个回答
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)     
}

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


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()
更改为您想要的持续时间即可。


0
投票

Xcode 14 更新:

        XCUIDevice.shared.press(XCUIDevice.Button.home)
        sleep(30)
        XCUIApplication().launch()
© www.soinside.com 2019 - 2024. All rights reserved.