Android 表示 onData 奇怪的行为

Android Espresso onData strange behavior

我有一个 ActivityListView (id: android.R.id.list). ListView 显示来自自定义适配器的信息,我想使用 Espresso 单击特定项目中的特定视图:我想单击 ID 为 [ 的视图=45=] 在显示来自对象 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());

当使用虚拟数据时,它会点击正确的列表项。此外,在模拟器上使用虚拟数据时,它还会点击操作栏菜单。

如果我删除菜单,测试会通过而不会点击任何内容(据我所知...)

有人知道为什么会发生这种奇怪的行为吗?

谢谢!

我明白了!奇怪的行为与 onData() 无关。我正在使用操作栏覆盖模式。由于从我的设备到模拟器的屏幕尺寸不同,并且由于用于填充列表的数据不同(虚拟与从服务器加载),有时我想要单击的项目会出现在操作栏下方。当 Espresso 尝试点击它时,它会点击操作栏...