Android Espresso onData奇怪的行为

时间:2015-02-19 16:38:55

标签: android functional-testing android-espresso

我的活动包含 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());

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

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

有没有人有这种奇怪行为发生的想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

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