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

Loc*_*eyu 1 iphone automated-tests ios xctest xcuitest

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

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

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

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

Ter*_*rje 9

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

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

两个目标依赖项

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

app1 = XCUIApplication(bundleIdentifier: "no.terje.app1.App1")
app1.launch()
app2 = XCUIApplication(bundleIdentifier: "no.terje.app2.App2")
app2.launch()
Run Code Online (Sandbox Code Playgroud)

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

现在你们都已成立了.对这两个应用程序运行测试:

func testButtonsExist() {
  app1.activate()
  app1.buttons["mybutton"].exists
  app2.activate()
  app2.buttons["myotherbutton"].exists
}
Run Code Online (Sandbox Code Playgroud)

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