【问题标题】:XCTest UI Testing - How to close and open an app without relaunch?XCTest UI 测试 - 如何在不重新启动的情况下关闭和打开应用程序?
【发布时间】:2017-06-16 12:47:37
【问题描述】:

我想让我的应用程序进入后台,然后回到前台。

要让应用进入后台:XCUIDevice.shared().press(XCUIDeviceButton.home)

终止应用程序(强制点击):XCUIApplication().terminate()

要启动应用程序:XCUIApplication().launch()

问题:当我尝试关闭和打开应用程序时,launch() 方法会从后台清除应用程序并重新打开应用程序。

我看到了这个comment 关于这个。但无法在 UI 测试中弄清楚。我正在使用斯威夫特。需要帮助!!

【问题讨论】:

    标签: background xctest launch xcode-ui-testing suspend


    【解决方案1】:

    从 Xcode 9 和 iOS 11 开始,XCUIApplication() 有一个 activate() 方法,您可以使用它来重新启动应用程序。

    正如brandenbyers 建议的那样,您可以“按下”主页按钮以使您的应用成为后台,然后像这样再次激活它以避免使用Siri:

    XCUIDevice.shared.press(.home)
    XCUIApplication().activate()
    

    请注意,这只适用于使用 XCUITest 而不是 XCTest 构建的目标。如果您在从 XCTest 构建的目标中尝试此操作,所有 XCUIApplication 操作都会崩溃。

    【讨论】:

    • 这就是解决方案
    • 这是否适用于没有主页按钮的设备,例如 iPhone X?
    【解决方案2】:

    在此处提出并回答了类似的问题 Possible to bring the app from background to foreground?

    这就是我的 XCUITest 中的内容,它就像一个魅力(xcode 10.1 和测试设备是 iPhone X 11.0)

    func testWhatever() {
    
    // You test steps go here until you need the background foreground to run
    // To background the app 
    XCUIDevice.shared.press(XCUIDevice.Button.home) 
    // To bring the app back
    XCUIApplication().activate() 
    
    // You test continues after background foreground has been done. }
    

    【讨论】:

      【解决方案3】:

      我遵循@randenbyers 在模拟器上提到的内容。 在此之前,我已经手动激活了 Siri 服务。

      XCUIDevice.shared().press(XCUIDeviceButton.home)
      if #available(iOS 10.3, *) {
          XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {Writer}")
          XCTAssertTrue(XCUIApplication().tabBars.buttons["My Projects"].exists)
      } else {
          app.scrollViews.otherElements.buttons["Log Out"].tap()
          assertionFailure("Fail because Siri service is not activated")
      }
      

      【讨论】:

        【解决方案4】:

        从 Xcode 8.3 和 iOS 10.3 开始,现在可以使用 Siri 重新启动后台应用!

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

        确保在测试套件文件的顶部包含 @available(iOS 10.3, *)

        【讨论】:

        • Siri 在模拟器中总是显示以下错误:“抱歉,我的连接有问题。请稍后再试”
        • 我只在物理设备上使用过这个。使用真实设备时,您是否从 Siri 收到同样的错误?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 2013-03-13
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多