Espresso - 点击带有app:showAsAction="ifRoom"的菜单项

3
我可以帮您翻译,以下是翻译结果:

我有一个菜单项,我想使用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个回答

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

首先,您需要检查菜单是否以图标形式存在。如果是,则点击它。如果没有,则打开“更多选项”菜单,然后从弹出窗口中选择“保存”菜单。

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


1
FYI,以下回答中有一个优雅的解决方案:https://dev59.com/Kpzha4cB1Zd3GeqPAB_E#40864574 - JulianHarty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接