Espresso - 单击带有 app:showAsAction="ifRoom" 的菜单项
Espresso - Clicking menu item with app:showAsAction="ifRoom"
我想使用 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
,在某些设备中,菜单在操作栏中显示为图标,而在较小的设备中,它显示在 "more options".
下方
我可以使用以下代码点击操作栏中的“保存”图标:
onView(withId(R.id.action_save)).perform(click());
如果 "more options" 下有保存,我可以使用下面的代码点击保存:
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.menu_action_save)).perform(click());
我想要一种在两种情况下都适用的测试方法。
try {
onView(withId(R.id.action_save)).perform(click());
} catch (NoMatchingViewException e) {
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.menu_action_save)).perform(click());
}
您将首先检查菜单是否显示为图标。如果是这样,请单击它。
如果没有,请打开 "More options" 菜单,然后从弹出窗口中 select "Save" 菜单。
注意:我知道我们不应该在测试方法中使用条件,但我真的找不到任何其他解决方案。如果你们中有人确实找到了更好的解决方案,请post在这里。
我想使用 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
,在某些设备中,菜单在操作栏中显示为图标,而在较小的设备中,它显示在 "more options".
我可以使用以下代码点击操作栏中的“保存”图标:
onView(withId(R.id.action_save)).perform(click());
如果 "more options" 下有保存,我可以使用下面的代码点击保存:
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.menu_action_save)).perform(click());
我想要一种在两种情况下都适用的测试方法。
try {
onView(withId(R.id.action_save)).perform(click());
} catch (NoMatchingViewException e) {
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.menu_action_save)).perform(click());
}
您将首先检查菜单是否显示为图标。如果是这样,请单击它。 如果没有,请打开 "More options" 菜单,然后从弹出窗口中 select "Save" 菜单。
注意:我知道我们不应该在测试方法中使用条件,但我真的找不到任何其他解决方案。如果你们中有人确实找到了更好的解决方案,请post在这里。