XCTestRunner 能否访问目标应用程序的视图控制器属性?

Can an XCTestRunner access View Controller properties of target application?

我正在尝试使用 XCUITest 编写一些智能 UI 测试。现在我想构建一个测试套件,以便根据我的应用程序 ViewController 我可以推断出会发生什么类型的测试。示例是我在循环中进行猴子测试 运行ning,在我的应用程序的某些视图控制器上,我希望在全屏上点击,但是在其他视图控制器上,我只想在部分屏幕上点击屏幕,据我所见,UI 测试被捆绑在一起,运行 在 UITestRunner 中,我正在测试的应用程序是目标应用程序,无论如何我可以访问视图控制器的属性目标应用程序?

您可以尝试“@testable import”来访问您的应用。但是您可能永远不会通过这样做在 运行ning XCUI 测试时获得对当前 运行ning 应用程序的引用。

您应该考虑的是编写将 运行 在应用程序上下文中进行的集成测试,然后您可以执行以下操作:

@testable 导入

让赢=UIApplication.shared.delegate?.window! 让 rootViewController = win?.rootViewController as <> 然后访问 rootViewController 并将操作发送到该特定控制器中定义的控制器和控件。 我们以这种方式编写大部分测试,这样更容易、更快速、更可靠。

有关详细信息,请参阅下面的快速文档。 https://github.com/Quick/Quick/blob/master/Documentation/en-us/TestingApps.md

不,您无法在 运行 时间从 UI 测试代码访问视图控制器属性,因为 UI 测试 运行ner 是应用程序的单独可执行文件(可以访问视图控制器的地方)。

UI 测试是高级集成测试,用于测试 UI 级别的功能。您只能通过触摸进行输入,并且只能通过 UI.

接收输出

如果您需要测试需要访问视图控制器属性的内容,则需要使用单元测试。在与应用程序相同的可执行环境中进行单元测试 运行,以便您可以访问您创建的对象的特定属性。

如果您想让 UI 测试以不同的方式与不同的页面交互,请考虑缩小可用元素列表的范围,并识别特定页面以通过查找独特的元素进一步过滤列表每一页。查看 the page object model 了解如何针对多个页面扩展 UI 测试。