XCUITest:以协调的方式在两个应用程序中运行测试

时间:2018-01-31 22:55:25

标签: ios iphone automated-tests xctest xcuitest

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

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

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

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

1 个答案:

答案 0 :(得分:9)

这实际上在Xcode 9中得到了很好的支持。以下是如何设置它:

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

Two target dependencies

现在只需要在测试的设置功能中启动这两个应用,使用它们的包标识符:

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打开。但如果您遇到特定问题,请发布您正在尝试的特定事项并失败。

相关问题