我已启用主页按钮返回上一个视图。简单地说,这样做:
getActionBar().setDisplayHomeAsUpEnabled(true);
我正在使用com.android.support:appcompat-v7:21.0.2
的最新版本。但是,当我使用下面的代码时,它不会抛出异常。
Espresso.onView(ViewMatchers.withId(android.R.id.home)).perform(ViewActions.click());
Espresso.onView(ViewMatchers.withId(R.id.home)).perform(ViewActions.click());
例外:
com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: is <2131296261> ...
答案 0 :(得分:16)
使用资源中的说明时,可以单击按钮。
onView(withContentDescription(R.string.abc_action_bar_up_description)).perform(click());
适用于appcompat-v7:23.1.1
答案 1 :(得分:4)
我做了以下解决方法:
private String getString(int resId){
return getInstrumentation().getTargetContext().getString(resId);
}
public void testUI() {
onView(withContentDescription(getString(R.string.navigation_drawer_open))).perform(click());
onView(withContentDescription(getString(R.string.navigation_drawer_close))).perform(click());
}
基本上我使用内容描述属性而不是视图ID。
答案 2 :(得分:0)
我自己回答。根据{{3}}上的帖子,无法为ActionBar中的Home按钮指定Id
,至少是支持库的版本7,因此我们应该使用“向上导航”。但为什么呢?
这要归功于Espresso错误跟踪:
--------> ActionMenuView
{
id=-1, visibility=VISIBLE, width=144, height=168, has-focus=false,
has-focusable=true, has-window-focus=true, is-clickable=false,
is-enabled=true, is-focused=false, is-focusable=false,
is-layout-requested=false, is-selected=false, root-is-layout-requested=false,
has-input-connection=false, x=936.0, y=0.0, child-count=1
}
|
--------> ActionMenuItemView
{
id=2131296554, res-name=general, desc=, visibility=VISIBLE,
width=144, height=144, has-focus=false, has-focusable=true,
has-window-focus=true, is-clickable=true, is-enabled=true,
is-focused=false, is-focusable=true, is-layout-requested=false,
is-selected=false, root-is-layout-requested=false,
has-input-connection=false, x=0.0, y=12.0, text=, input-type=0, ime-target=false
}
|
--------> ImageButton
{
id=-1, desc=Navigate up, visibility=VISIBLE, width=168, height=168,
has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=true,
is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false,
is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0
}
|
答案 3 :(得分:-1)
我不知道使用appCompat的操作栏有这么大的差异。正如你们在评论中所写的那样,“向上导航”确实有效。对于那些像我一样无法估算如何使用浓缩咖啡的人来说,就是这样:
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
onView(withContentDescription("Navigate up")).perform(click());
为AppCompat v7删除
在我的项目中,我一起使用Robotium和Espresso。对于主页按钮单击,我使用Robotiums Solo#clickOnActionBarHomeButton
。它在click home icon with espresso中超过1行
但您不必指定标题。 (在某些特殊情况下可能有用......)。无论如何我决定根据SDK版本使用哪一个:
public static void actionBarBack(Instrumentation instrumentation, final Solo solo, String actionBarText) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
onView(allOf(withText(actionBarText), isDisplayed())).perform(click());
}
else {
instrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
solo.clickOnActionBarHomeButton();
}
});
}
}
以下是用法:
Compatibility.actionBarBack(getInstrumentation(), solo, R.string.any);
它必须包含在runOnMainSync
中,因为Robotium测试框架有点懒,如果你有断言,例如对于动作栏标题,在声明之后它仍然不会回来。但可以只使用solo.clickOnActionBarHomeButton();
进行尝试。它可能适合你。