Espresso - 点击菜单项,包含app:showAsAction =“ifRoom”

时间:2017-05-07 16:33:06

标签: android android-testing android-espresso

我想使用Espresso点击以下菜单项:

<item
    android:id="@+id/action_save"
    android:icon="@drawable/vector_image_save"
    android:orderInCategory="4"
    android:title="@string/menu_action_save"
    app:showAsAction="ifRoom"/>

由于ifRoom,在某些设备中,菜单在操作栏中显示为图标,而在较小的设备中,菜单显示在“更多选项”下。

我可以使用以下代码点按操作栏中的“保存”图标: onView(withId(R.id.action_save)).perform(click());

如果它出现在“更多选项”下,我可以使用以下代码点击“保存”: openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); onView(withText(R.string.menu_action_save)).perform(click());

我想要一种适用于这两种情况的单一测试方法。

1 个答案:

答案 0 :(得分:2)

    try {
        onView(withId(R.id.action_save)).perform(click());
    } catch (NoMatchingViewException e) {
        openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
        onView(withText(R.string.menu_action_save)).perform(click());
    }

您将首先检查菜单是否作为图标出现。如果是这样,请单击它。 如果没有,请打开“更多选项”菜单,然后从弹出窗口中选择“保存”菜单。

注意:我知道我们不应该在测试方法中使用条件,但我真的找不到任何其他解决方案。如果您有任何人找到更好的解决方案,请在此处发布。