如何在 Espresso 测试中获取视图的标签?

How to get the tag of a view in an Espresso test?

我正在使用 Espresso 进行端到端测试。
在测试中我需要知道用户 ID(因为我需要调用一个模拟某个外部方的端点)。
为了获取用户 ID,我正在考虑将其设置为视图中的标签并使用 Espresso 获取标签。

有办法吗?

我只是想办法,并没有真正获取标签的内容

感谢您的帮助。

您可以使用以下扩展功能:

inline fun <reified T : Any> ViewInteraction.getTag(): T? {
    var tag: T? = null
    perform(object : ViewAction {
        override fun getConstraints() = ViewMatchers.isAssignableFrom(View::class.java)

        override fun getDescription() = "Get tag from View"

        override fun perform(uiController: UiController, view: View) {
            when (val viewTag = view.tag) {
                is T -> tag = viewTag
                else -> error("The tag cannot be casted to the given type!")
            }
        }
    })
    return tag
}

获取标签如:

@Test
fun myTest() {
    ...
    val userId = onView(withId(R.id.myView)).getTag<String>()
    ...
}

您不需要 Espresso 来检索 View 标签 - 相反,您可以简单地调用 findViewById(...) 来查找您的 View然后使用 getTag() 方法检索其标签。

因此,假设您使用 ActivityTestRule 来启动您的 ActivityView 是可见的并且在 Activity 中具有唯一 ID,您可以这样做如下:

...
// make sure the View is there and visible
onView(withId(R.id.someId)).check(matches(isDisplayed()));

// retrieve its tag using ActivityTestRule
String tag = (String) activityRule.getActivity().findViewById(R.id.someId).getTag();
...