XCUITest 和动态生成的视图
Posted
技术标签:
【中文标题】XCUITest 和动态生成的视图【英文标题】:XCUITest and dynamically generated views 【发布时间】:2016-02-18 22:37:07 【问题描述】:对于 XCUITest 相关工作,我如何访问我的应用程序的类?
我有一组从我控制服务器端的 JSON 结构动态生成的屏幕(在这种情况下,我在多个视图控制器中询问用户的入职问题)。我不知道 JSON API 会产生什么内容,这样我就可以在 XCUITest 中编写声明性 UI 测试代码。
我希望能够使用我的 XCUITest 访问一组围绕 JSON 结构的包装类,以提取相关的信息位,这些信息可以引导我了解这些屏幕上的内容,以便我可以模拟正确填充它们。通过一些基本的谷歌搜索,很明显 XCUITests 位于主要目标/应用程序的代码之外,但我还没有找到任何策略来在 XCUITest 中访问它。
如果没有直接的方法来做到这一点(有吗?),有什么好的选择?
此时,我正在考虑在我的 VC 层次结构中嵌入一个隐藏的视图对象,我可以使用 XCUITest 调用它来实际填充内容(因为我可以看到我的 JSON 管理类)。
谢谢!
【问题讨论】:
是否可以编写一个常规的单元测试来将视图与静态图像进行比较? 无法访问应用程序的类。我使用了一个特殊的视图,它只在调试模式下出现在层次结构中。 您可以在您的应用程序中集成 GCDWebserver。这样,您的测试应用程序可以充当客户端,而您的主应用程序可以充当服务器。由于主应用程序可以访问所有类,因此它可以使用这种机制将响应数据发送到您的测试应用程序。链接库:github.com/swisspol/GCDWebServer 【参考方案1】:正如您所提到的,XCUITests 与您的应用程序分开编译和执行。您的测试无法从您的应用程序中访问任何代码。 XCUITests 在您的应用 UI 的可访问性树上工作。
XCUITests 背后的理念是让测试尽可能接近最终用户的流程。我会围绕检查您可能期望加载的独特内容类型和组合来构建您的测试。但是,如果您必须有一些额外的线索来帮助您的测试运行,我建议在您的 Xcode 项目中使用一个单独的方案来针对 Debug 构建配置运行您的测试,该配置可以使用您可以运行的示例数据集预先填充您的应用程序测试反对。或者在方案中包含一些额外的 UI 元素,详细说明在运行时加载的 UI 的细节。
【讨论】:
【参考方案2】:类的内部自定义扩展可以公开您想要访问的函数和属性。
【讨论】:
以上是关于XCUITest 和动态生成的视图的主要内容,如果未能解决你的问题,请参考以下文章
根据其上方视图“元素”的宽度/高度“动态”生成子视图框架的 x 和 y 值?