Android 浓缩咖啡-使用app:showAsAction=";单击菜单项;ifRoom";

Android 浓缩咖啡-使用app:showAsAction=";单击菜单项;ifRoom";,android,android-testing,android-espresso,Android,Android Testing,Android 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,在某些设备中,菜单在操作栏中显示为图标

我想使用浓缩咖啡单击以下菜单项:

<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(带id(R.id.action\u save)).perform(click())

如果“更多选项”下有保存,我可以使用下面的代码点击保存:
openActionBarOverflowerOptions菜单(InstrumentationRegistry.getTargetContext());
onView(使用文本(R.string.menu_action_save)).perform(单击())

我想要一个在两种情况下都能工作的单一测试方法

    try {
        onView(withId(R.id.action_save)).perform(click());
    } catch (NoMatchingViewException e) {
        openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
        onView(withText(R.string.menu_action_save)).perform(click());
    }
您将首先检查菜单是否作为图标显示。如果是,请单击它。 如果没有,请打开“更多选项”菜单,然后从弹出窗口中选择“保存”菜单


注意:我知道我们不应该在测试方法中使用条件,但我真的找不到任何其他解决方案。如果你们中有人找到了更好的解决方案,请张贴在这里。

FYI以下答案中有一个优雅的解决方案