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

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

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

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

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

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

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

两个目标依赖项

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

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