【问题标题】:Sending app to background and re-launching it from recents in XCTest将应用程序发送到后台并从 XCTest 中的最新消息重新启动它
【发布时间】:2017-03-31 21:44:26
【问题描述】:

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

【问题讨论】:

  • 您可以尝试只记录流程,这应该可以让您很好地了解如何实现这一点。应用程序发送到后台后,录制不会停止。然后 sleep(n) 你的测试执行或 dispatch_after 直到你让它回到前台(并停止记录)
  • 我试过了。在录制时进入后台后,它使用 XCUIApplication() 的元素从最近的应用程序中访问应用程序(似乎对于录制器。系统 ui 现在变成了 XCUIApplication)。因此,在尝试运行该记录时,它会出错。如果您离开应用程序,基本上您会丢失应用程序的 XCUIApplication 上下文。
  • @rachit 我在下面提供的解决方案对您有用吗?

标签: ios swift ui-automation xctest xctestcase


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    不确定这是否可行,因为我尚未对其进行测试,但值得一试。如果不出意外,它应该可以让您很好地了解在哪里查看。

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

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

    【讨论】:

    • 我试过了,按下主页按钮后,应用程序被移至后台。但是挂起功能无法再次将应用程序置于前台。
    • 所以计时器没有倒计时并重新启动应用程序?
    • 这个解决方案对任何人都有效吗?我知道它有 4 票赞成,但它真的有效吗?根据cmets,它不清楚。谢谢。
    • 在 XCTest 案例中不起作用。这些是 UI 测试对象。按下按钮似乎确实有效,但重新启动却没有。它要么崩溃说配置中没有目标应用程序,要么只是没有启动指定包标识符。
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多