在 Espresso 中测试相对布局的内容
Testing contents of a Relative Layout in Espresso
我有以下结构:
+------------>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))));
我无法确认他们是一对。我该如何解决这个问题?
你有 ListView 吗?然后你可以使用 onData DataInteraction 而不是 onView ViewInteraction。
如果这不可行,您可以使用 hasSibling 匹配器,例如这样:
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))));
我有以下结构:
+------------>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))));
我无法确认他们是一对。我该如何解决这个问题?
你有 ListView 吗?然后你可以使用 onData DataInteraction 而不是 onView ViewInteraction。
如果这不可行,您可以使用 hasSibling 匹配器,例如这样:
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))));