【问题标题】:How to check if any app is installed during XCTest?XCTest期间如何检查是否安装了任何应用程序?
【发布时间】:2022-12-05 01:52:52
【问题描述】:

我需要检查活动设备或模拟器上是否安装了具有特定 bundleIdentifier 的应用程序,我需要通过 XC UI 测试执行此操作。

我试过这样做:

import XCTest

class ServerLoop: XCTestCase {
  func testRunAppInstalled() async throws {
    let app = XCUIApplication("pl.bartekpacia.SomeApp")
    if app.exists {
      // code
    }
  }
}

但不幸的是,它只告诉我该应用程序当前是否打开,未安装。

我希望能够检查是否任何应用程序已安装,不仅是我的应用程序。我需要这个,因为如果没有安装带有bundleId 的应用程序而我安装了XCUIApplication(bundleId),那么测试将失败并且没有办法阻止它这样做。

【问题讨论】:

  • 只是一个想法:给一些应用程序一个自定义方案。如果您能够打开该方案,则该应用程序已安装。 (我建议这样做是因为这是我的应用程序了解是否安装了某些其他应用程序的方式。)
  • 我如何向 com.apple.Maps 或 com.apple.preferences 添加自定义方案?我编辑了问题以使我的意图更清楚。
  • 地图有一个您可以检查的自定义方案。我不知道com.apple.preferences指的是什么。
  • com.apple.preferences 是 Settings.app :)
  • 不过,让我们把它留在这里,看看是否有人提供不同的信息

标签: ios swift xctest xcuitest


【解决方案1】:

我无法让它与包标识符一起使用。但是如果你有在 springboard 上可见的应用程序名称,那么这段代码在我的测试中有效:

func test_existence() {
    let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
    let appIcon = springboard.icons["Settings"]
    if appIcon.exists {
        print("YEAH!")
    } else {
        XCTFail()
    }
}

【讨论】:

  • 谢谢。那是一些解决方案,但随后我们变得依赖于语言。
  • 是的,不幸的是那是真的。几年前我曾使用过包标识符。但是苹果删除了它。我不知道为什么。
【解决方案2】:

SpringBoard 解决方案似乎是一个不错的解决方案。

您还可以尝试启动 XCUIApplication,并期望在非严格模式下使用 XCTExpectFailure 进行的测试失败,XCTestCase 上的 continueAfterFailure 属性设置为 true。

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 2016-11-27
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2011-10-14
    • 2014-09-21
    相关资源
    最近更新 更多