【发布时间】:2015-11-27 22:54:27
【问题描述】:
我在操作栏中有一个菜单,我通过以下方式创建:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 98,Menu.NONE,R.string.filter).setIcon(R.drawable.ic_filter_list_white_48dp).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add(Menu.NONE, 99,Menu.NONE,R.string.add).setIcon(R.drawable.ic_add_white_48dp).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
menu_main.xml 看起来像:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never"
android:icon="@drawable/ic_settings_white_48dp"/>
</menu>
在 Espresso 中进行测试时,我想点击“添加”图标(menuId 99)。我试过了
@Test
public void testAdd() {
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.add)).perform(click());
}
但这会因 NoMatchingViewException 而失败。 (设置项,直接在xml中定义我可以用同样的代码点击。)
这适用于 targetSdkVersion 23 和 AppCompatActivity。工具栏的相关行是:
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
if( getSupportActionBar() != null ) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
tool_bar.xml 看起来像:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:background="@color/ColorPrimary"
android:elevation="4dp"
tools:ignore="UnusedAttribute">
</android.support.v7.widget.Toolbar>
【问题讨论】:
-
你在使用什么
targetSdkVersion、ActionBar 和设备/模拟器?。请参阅 openActionBarOverflowOrOptionsMenu() 实现(Espresso 类),取决于这些因素。我需要调查它,但根据我使用的模拟器,那里有问题。 -
targetSdkVersion 23 和 AppCompatActivity。我在上面添加了工具栏代码。
-
用“withText(R.string.add)”匹配文本时会不会出现问题,因为实际文本不可见,但只有图标(R.drawable.ic_add_white_48dp)可见?
-
这是在 Sony Xperia SP(真实设备,而非模拟器)上。
-
不是解决方案,但我注意到“onView(withId(99)).perform(click());”有效,即使我记得在某处读到那些“menu-Id”与“view-id”不同......
标签: java android testing android-actionbar android-espresso