我正在Espresso for Android中编写UI自动化测试,并且遇到了迄今为止我还没有任何解决方案的场景.
在一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
对于UI测试,我需要编写测试用例来检查是否MenuItem启用/禁用.
点击overflowmenu,
ViewInteraction actionMenuItemView = onView(
allOf(withId(R.id.action_settings), withContentDescription("Settings"), isDisplayed()));
actionMenuItemView.perform(click());
Run Code Online (Sandbox Code Playgroud)
到目前为止,我试图检查断言的内容如下.
onView(allOf(withText("Cancel Order"), withId(R.id.cancel_order))).check(matches(not(isEnabled())));
Run Code Online (Sandbox Code Playgroud)
但这会引发NoMatchingViewException消息
NoMatchingViewException:层次结构中找不到匹配的视图:(带有text:是"Cancel Order",ID为:com.equinix.ecp.betatest:id/cancel_order)
所以我尝试将其更改为
onView(allOf(withText("Cancel Order"))).check(matches(not(isEnabled())));
Run Code Online (Sandbox Code Playgroud)
不知何故,这与视图匹配,但它不是MenuItem,而是MenuItem中的TextView,因为我设置setEnabled()为MenuItem,check()Assertion将不会按预期工作,因为它是一个TextView.
所以我的问题是如何编写Test以检查MenuItem的启用/禁用状态.
我正在开发Xamarin Android中的应用程序以及MvvmCross.MvvmCross有助于将布局中的视图属性直接绑定到ViewModel.对于EditText,我们可以绑定文本
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
local:MvxBind="Text Property" />
Run Code Online (Sandbox Code Playgroud)
我需要使用MvvmCross绑定SearchView文本.我尝试过Text如下,但它不起作用.
<SearchView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:queryHint="Customer name"
local:MvxBind="Text SearchString" />
Run Code Online (Sandbox Code Playgroud)
如何使用MvvmCross绑定SearchView文本?