Как получить тег вида в тесте эспрессо? - PullRequest
2 голосов
/ 29 января 2020

Я работаю в каком-то сквозном тесте, используя Espresso.
В тесте мне нужно знать идентификатор пользователя (потому что мне нужно вызвать одну конечную точку, которая высмеивает какую-то внешнюю сторону).
Чтобы получить пользователя id, я думал о том, чтобы установить его в качестве тега в представлении и получить тег с помощью Espresso.

Есть ли способ сделать это?

Я только нахожу способы получить представление по тегу , но фактически не получить содержимое тега.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 31 января 2020

Вам не нужно Espresso для получения тега View - вместо этого вы можете просто позвонить findViewById(...), чтобы найти View, а затем получить его тег, используя метод getTag().

Итак, если вы используете ActivityTestRule для запуска Activity, View видим и имеет уникальный идентификатор в Activity, вы можете сделать это следующим образом:

...
// 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();
...
0 голосов
/ 29 января 2020

Вы можете использовать следующую функцию расширения:

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>()
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...