在 Android Studio 中,当 Espresso 测试失败时,如何在日志 window 中查看完整的层次结构视图

In Android Studio, when an Espresso test fails, how to view full hierarchy view in log window

我写了一个失败的 Espresso 测试(未找到匹配的视图)。

示例: onView((allOf(withText("OK"), hasSibling(withText("Text"))))).perform(click());

我得到的错误是:

androidx.test.espresso.NoMatchingViewException: No views in hierarchy found
matching: (with text: is "OK" and has sibling: with text: is "Text")
If the target view is not part of the view hierarchy, you may need to use 
Espresso.onData to load it from one of the following
AdapterViews:androidx.appcompat.widget.AppCompatSpinner{da0caf9 VFED..CL. 
........ 273,0-505,48 #7f0901c1 app:id/structure_formation_spinner}
View Hierarchy:
....

然后显示视图层次结构。问题是在 Android Studio 中,层次结构被截断为 32K 个字符。

我知道如何修复返回的错误,这不是我的问题。

我的问题是:如何查看完整的视图层次结构? 在 Android Studio 中可以吗? 如果没有,是否可以从命令行进行?

我发现的唯一方法是在“终端”window 中启动测试。 然后显示完整的层次结构(在我的例子中大约有 300K 个字符)

由于测试是在 Device/Emulator 上执行的,因此可以从 Logcat(即Logcat window 在 Android 工作室中)。过滤器 E/TestRunner 简化了搜索。

Logcat 本身并不是无限的。默认大小为 1024KB。可以通过 Settings | Editor | General | Console

更改

TL;DR; Android Studio 和 Android Device/Emulator 通过 protobuf 消息进行通信。来自设备的数据以 key-value 映射(InstrumentationData.ResultsBundleEntry 的集合)的形式到达 com.android.ddmlib.testrunner.InstrumentationProtoResultParser#updateState

Android Studio 中的 Instrumented 测试结果视图仅显示 stackTrace。您可以通过在插桩测试中的任意位置添加 println("hello") 来说服自己。该行只会出现在 Logcat 中,不会出现在测试结果视图中。

stackTrace 是通过键 StatusKeys.STACK 从地图中获得的(参见 ln 239)。不幸的是,此时到达的数据已经被截断。有包含全文的 STREAM 键,但未使用。所以问题出在设备端未能发送完整的堆栈跟踪,IMO。

其他跑步者(例如,gradle,当来自控制台的 运行 时)可能会使用该地图中的不同值。这解释了为什么当 运行 来自控制台时您会看到完整的消息。

您也可以结帐Radiography by Square。它将帮助您在日志中打印视图层次结构。