Тестирование содержимого относительного макета в эспрессо
У меня есть следующая структура:
+------------>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))));