我有一个带有2个ListView的Activity,我想找到第一个ListView的Child,但是我找到了第一个ListView的Child和第二个ListView,为什么?请帮帮我。
代码:
DataInteraction dataInteraction =
onData(allOf(
withClassName(endsWith("LinearLayout")),
hasSibling(withText("9.0")),
hasSibling(withText("衬衫"))
));
dataInteraction.onChildView(withId(R.id.order_untake_jijia_listview_jia))
.atPosition(0);
dataInteraction.perform(ViewActions.click());
它找到了:
ListView{id=2131493579, res-name=order_jijia_listview, visibility=VISIBLE, width=768,
height=659, has-focus=false, has-focusable=true, has-window-focus=true,
is-clickable=true, is-enabled=true, is-focused=false, is-focusable=true,
is-layout-requested=false, is-selected=false, root-is-layout-requested=false,
has-input-connection=false, x=0.0, y=345.0, child-count=7} ****MATCHES****
ListView{id=2131493586, res-name=order_jijia_pop_listview, visibility=VISIBLE,
width=0, height=0, has-focus=false, has-focusable=false,
has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false,
is-focusable=false, is-layout-requested=true, is-selected=false,
root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0,
child-count=0} ****MATCHES****
答案 0 :(得分:0)
您有两场比赛,因为您必须使用RecyclerView。这就是为什么espresso找到两个在布局中定义了相同id的元素。
看看这个答案: Espresso RecyclerView inside ViewPager
此外,我认为如果您的应用中存在泄漏,它可以匹配多个视图,但我认为您更有可能使用recyclerview并且您只需要以适当的方式访问它。
也有可能你在不同的布局中定义了相同的id,并且其中一些在内存中,即使它们不在同一时间在屏幕上,在这种情况下你可以使用isCompletelyDisplayed()方法来匹配显示的那个。
希望这有帮助。
答案 1 :(得分:0)
您必须指出espresso应该执行搜索/操作的适配器视图:
onData(allOf(withClassName(endsWith("LinearLayout")),
hasSibling(withText("9.0")),
hasSibling(withText("衬衫"))))
.inAdapterView(withId(R.id.order_jijia_listview))
.onChildView(withId(R.id.order_untake_jijia_listview_jia))
.atPosition(0)
.perform(click());