Тестирование содержимого относительного макета в эспрессо

У меня есть следующая структура:

+------------>LinearLayout{id=2131689635, res-name=ll_monthly_advance_payments_container, 
|
+------------->LinearLayout{id=2131689636,  res-name=ll_monthly_advance_payments_list_container, 
|
+-------------->LeftRightListItemView{id=-1, 
|
+--------------->RelativeLayout{id=-1, 
|
+---------------->ScrollableTextView{id=2131689786, res-name=stv_left, text=Electricity
|
+---------------->AppCompatTextView{id=2131689787, res-name=tv_right, text=53.00 EUR
|
+-------------->LeftRightListItemView{id=-1, 
|
+--------------->RelativeLayout{id=-1, 
|
+---------------->ScrollableTextView{id=2131689786, res-name=stv_left, text=Water
|
+---------------->AppCompatTextView{id=2131689787, res-name=tv_right, text=251.00 EUR
|
+-------------->LeftRightListItemView{id=-1, 
|
+--------------->RelativeLayout{id=-1, 
|
+---------------->ScrollableTextView{id=2131689786, res-name=stv_left, text=Totals
|
+---------------->AppCompatTextView{id=2131689787, res-name=tv_right, text=304.00 EUR

То, что я пытаюсь сделать, это проверить, как в паре, stv_left а также tv_right содержит правильные значения. Я могу подтвердить каждый в отдельности с помощью следующего сценария:

onView(allOf(withId(R.id.tv_right), withText("53.00 EUR"), isDescendantOfA(withId(R.id.ll_monthly_advance_payments_list_container))));

Я не могу подтвердить их как пару. Как я могу решить эту проблему?

2 ответа

Решение

У вас есть ListView? Тогда вы можете использовать onData DataInteraction вместо onView ViewInteraction.

Если это невозможно, вы можете использовать hasSibling Matcher, например, таким образом:

onView(allOf(withId(R.id.stv_left), withText("Electricity"),
    hasSibling(allOf(withId(R.id.tv_right), withText("53.00 EUR"))),
    isDescendantOfA(withId(R.id.ll_monthly_advance_payments_list_container))));

Но вы, вероятно, хотите сделать сопоставление текста в check() вот так (я также удалил некоторые совпадения, которые мне не нужны):

onView(allOf(
    withId(R.id.tv_right),
    hasSibling(withText("Electricity"))))
.check(matches(withText("53.00Euro")));

Оба работали на меня.

Альтернативное решение, на которое я наткнулся, было:

onView(allOf(withText("Elecrtricity"),
    withText("53.00 EUR"),
    isDescendantOfA(withId(R.id.ll_monthly_advance_payments_list_container))));
Другие вопросы по тегам