【问题标题】:XCUITest: Running tests across two apps in a coordinated fashionXCUITest:以协调的方式跨两个应用程序运行测试
【发布时间】:2018-07-11 04:35:39
【问题描述】:

我正在考虑使用 XCUITest 对我的 iOS 应用程序进行 UI 测试。看起来 XCUITest 具有广泛的功能,包括使用多个应用程序的能力。但是,多应用支持似乎有些受限。

似乎使用 XCUIApplication 我可以使用 Bundle ID 启动另一个应用程序,甚至可以监控它的状态。但是,我想要做的是能够为两个具有紧密交互的应用程序运行协调测试(例如,一个应用程序对另一个应用程序执行打开 URL,执行一些 UI 操作,然后返回到第一个应用程序)。

这可能只使用 XCUITest,还是我需要一些更高级别的工具? (我认为有一些工具可以做到这一点,但如果可能的话,我更愿意继续使用 XCUITest)

理想情况下,我会将所有代码放在一个文件中,以便在两个应用程序中执行 UI 操作。但如果这是不可能的,我会愿意编写单独的测试应用程序,这些应用程序有效地相互移交,在“轮到”时执行操作。但我不确定如何协调这两个测试应用程序。

【问题讨论】:

标签: ios iphone automated-tests xctest xcuitest


【解决方案1】:

这实际上在 Xcode 9 中得到了很好的支持。设置方法如下:

我发现最简单的方法是创建一个包含您的两个应用程序的工作区。在包含您的 UI 测试代码的应用项目中,以执行这两个应用程序,确保这两个应用程序都列在您的 UI 测试目标的目标依赖项下:

现在只需在测试的设置函数中启动两个应用程序,使用它们的包标识符:

app1 = XCUIApplication(bundleIdentifier: "no.terje.app1.App1")
app1.launch()
app2 = XCUIApplication(bundleIdentifier: "no.terje.app2.App2")
app2.launch()

(应用程序是我的测试类的实例成员,var app1: XCUIApplication!

现在一切就绪。像这样对两个应用程序运行测试:

func testButtonsExist() {
  app1.activate()
  app1.buttons["mybutton"].exists
  app2.activate()
  app2.buttons["myotherbutton"].exists
}

至于您提到的等待或异步挑战:我想其中大多数也存在于单个应用程序中的异步代码中,例如等待打开 URL。但是,如果您遇到特定问题,请发布您正在尝试和失败的特定事情。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多