在 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。它将帮助您在日志中打印视图层次结构。
我写了一个失败的 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。它将帮助您在日志中打印视图层次结构。