如何在 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
来启动您的 Activity
,View
是可见的并且在 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();
...
我正在使用 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
来启动您的 Activity
,View
是可见的并且在 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();
...