我正在为Android编写Espresso UI自动化测试,并遇到了一个目前没有解决方案的情况。
在一个Fragment中,我有一个带有单个项的OptionsMenu。该MenuItem的状态根据API响应的值进行设置。
一些方式可以匹配视图,但它不是菜单项而是菜单项内的TextView。由于我正在为菜单项设置setEnabled(),因此check()断言不会像预期的那样工作,因为它是一个TextView。所以我的问题是如何编写测试来检查菜单项的启用/禁用状态。
在一个Fragment中,我有一个带有单个项的OptionsMenu。该MenuItem的状态根据API响应的值进行设置。
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.clear();
getActivity().getMenuInflater().inflate(R.menu.menu_cancel_order, menu);
MenuItem cancelMenuItem = menu.findItem(R.id.cancel_order);
if(something) { // something can be a boolean value from server
cancelMenuItem.setEnabled(true);
} else {
cancelMenuItem.setEnabled(false);
}
}
对于UI测试,我需要编写测试用例来检查此MenuItem
是否启用/禁用。
要点击溢出菜单,
ViewInteraction actionMenuItemView = onView(
allOf(withId(R.id.action_settings), withContentDescription("Settings"), isDisplayed()));
actionMenuItemView.perform(click());
到目前为止,我尝试检查断言的结果如下。
onView(allOf(withText("Cancel Order"), withId(R.id.cancel_order))).check(matches(not(isEnabled())));
但是这会触发NoMatchingViewException
错误,并显示以下信息:
NoMatchingViewException: 未找到匹配的视图层次结构:(文本为:“Cancel Order”,ID为:“com.equinix.ecp.betatest:id/cancel_order”)
因此,我尝试将其更改为
onView(allOf(withText("Cancel Order"))).check(matches(not(isEnabled())));
一些方式可以匹配视图,但它不是菜单项而是菜单项内的TextView。由于我正在为菜单项设置setEnabled(),因此check()断言不会像预期的那样工作,因为它是一个TextView。所以我的问题是如何编写测试来检查菜单项的启用/禁用状态。