我的活动包含 ListView (ID: android.R.id.list )。 ListView 显示来自自定义适配器的信息,我想使用Espresso点击特定项目中的特定视图:我想点击ID R.id.continueButton <的视图/ em>在显示来自对象 testOrder 的信息的项目中。
我的测试是:
onData(is(sameAsOrder(testOrder)))
.onChildView(withId(R.id.continueButton))
.inAdapterView(withId(android.R.id.list))
.perform(click());
其中 sameAsOrder()是:
public static Matcher<Object> sameAsOrder(final Order order) {
assertNotNull(order);
return new BoundedMatcher<Object, Order>(Order.class) {
@Override
public boolean matchesSafely(Order myOrder) {
return myOrder.getId().equals(order.getId());
}
@Override
public void describeTo(Description description) {
description.appendText(" with id '" + order.getId() + "'");
}
};
}
我在我的设备上运行测试,但是当我从在线服务器加载我的订单对象时,操作栏菜单上会出现单击,就像我运行Espresso命令一样
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
使用虚拟数据时,单击正确的列表项。此外,在仿真器上使用虚拟数据时,它还会单击操作栏菜单。
如果我删除菜单,测试通过时没有点击任何内容(据我所知......)
有没有人有这种奇怪行为发生的想法?
谢谢!
答案 0 :(得分:0)
我明白了!这种奇怪的行为与 onData()无关。我正在使用操作栏叠加模式。由于从我的设备到模拟器的屏幕尺寸不同,并且由于使用不同的数据填充列表(虚拟与从服务器加载),有时我想要点击的项目位于操作栏下方。当Espresso尝试点击它时,它会点击操作栏...