运行 UI 测试时无法捕获视图层次结构

Posted

技术标签:

【中文标题】运行 UI 测试时无法捕获视图层次结构【英文标题】:Unable to capture view hierarchy while running UI Tests 【发布时间】:2017-04-17 07:11:25 【问题描述】:

通过 UI 测试目标运行应用程序时是否可以查看 UI 层次结构?

我得到一个白屏,上面写着“无法捕获视图层次结构。请检查控制台日志以获取更多信息”

【问题讨论】:

【参考方案1】:

您遇到问题是因为您尝试调试错误进程的视图层次结构。在 UI 测试中,有两个过程。首先是 UI 测试运行器,其次是您的应用程序。两者都已附加,但调试视图默认处理第一个进程,即运行程序而不是应用程序。而且你不能有跑步者的视图层次结构。因此,此消息: 请注意选择了哪个进程。

当 UI 测试启动时,您可以将此选择更改为应用程序本身,然后点击 Debug View Hierarchy 按钮,该按钮将成功捕获您的应用程序:

不过,这有点棘手。运行器进程仍然处于活动状态,即使它处于查看调试模式,它也会终止/重新启动您的应用程序。我只能在测试单个测试方法时捕获层次结构。 您可能必须放置一些等待代码来减慢测试执行速度,才能真正有时间点击 Debug View Hierarchy 按钮。

【讨论】:

在 Xcode 9 beta 4 中,我运行了正确的进程,但在调试 macOS 应用程序目标时仍然出现相同的错误。 Unable to capture view hierarchy. Details: Log Title: Data source expression execution failure. Log Details: error evaluating expression “(id)[[DBGTargetHub sharedHub] performRequestWithRequestInBase64:] "Execution was interrupted, reason: EXC_BAD_ACCESS (code=2, address=0x7fff5f3ffff8). The process has been returned to the state before expression evaluation." 我认为这是一个错误 我使用的是 Xcode 版本 10.2.1,我发现切换到正确的进程后,再次按下 View Debugger Hierarchy 按钮似乎可以解决问题!【参考方案2】:

可以通过在测试运行时打印应用程序的调试描述来查看 UI 视图层次结构(也称为元素子树)。

print(app.debugDescription)

重要提示:有时,当您打印视图层次结构时,它是“后面”的一个视图,因为它使用缓存的层次结构。考虑到这一点,只需在打印调试描述之前执行一个触发视图层次结构新快照的操作。

【讨论】:

是的,但注意的是完全一样的东西。我正在寻找一种在运行 UI 测试时使用 View UI Hierarchy 工具的方法

以上是关于运行 UI 测试时无法捕获视图层次结构的主要内容,如果未能解决你的问题,请参考以下文章

iOS10 UI教程层次结构的事件

iOS10 UI教程子视图和父视图UI层次结构和Views继承

如何编写在运行时确定视图内容的 Android UI 测试?

运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode

层次结构不适用于我的设备

编译时异常与运行时异常的区别