运行 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教程子视图和父视图UI层次结构和Views继承
如何编写在运行时确定视图内容的 Android UI 测试?