XCTestRunner可以访问目标应用程序的View Controller属性吗?

时间:2018-07-22 16:32:14

标签: ios xctest xcuitest

我正在尝试使用XCUITest编写一些智能UI测试。现在,我想构建一个测试套件,以便根据我的应用程序ViewController推断出发生哪种类型的测试。例如,我有一个循环运行的猴子测试,在我的应用程序的某些视图控制器上,我想在全屏上轻按,但是在其他视图控制器上,我只想在屏幕的一部分上轻按,已经看到UI测试被捆绑并在UITestRunner中运行,并且我正在测试的应用程序是目标应用程序,无论如何,我是否可以访问目标应用程序的View Controllers属性?

2 个答案:

答案 0 :(得分:1)

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

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

@testable导入

让win = UIApplication.shared.delegate?.window! 让rootViewController = win?.rootViewController作为<> 然后访问rootViewController并将动作发送到该控制器以及在该特定控制器中定义的控件。 我们以这种方式编写大多数测试,从而更加轻松,快捷和可靠。

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

答案 1 :(得分:1)

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

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

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

如果要使UI测试与不同页面进行不同的交互,请考虑缩小可用元素列表以供选择,并通过查找每个页面唯一的元素来标识特定页面以进一步过滤列表。请查看the page object model,了解有关如何扩展多个页面的UI测试的想法。