2014-12-17 4 views
9

Я включил кнопку дома, чтобы вернуться к предыдущему виду. Просто, как это сделать:Как проверить домашнюю кнопку на панели действий с эспрессо?

getActionBar().setDisplayHomeAsUpEnabled(true);

Я использую последнюю версию com.android.support:appcompat-v7:21.0.2. Однако, когда я использую приведенный ниже код, он не срабатывает при исключении Exception.

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

Хм, интересно. Я использую тот же код для выполнения действия на домашней кнопке: onView (withId (android.R.id.home)).выполнить (нажмите()); К сожалению, мы по-прежнему используем appcompat-v7: 20.0. +. Может быть, это как-то связано с новой панелью инструментов для Android? Какой идентификатор вы извлечете, если вы проверите представление в Android Monitor? – Christopher

+0

Очевидно, что нет нового идентификатора с новой панелью инструментов Android, вместо того, чтобы использовать «Навигация вверх» :( –

ответ

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()); 
} 

В основном я использую атрибут описания контента вместо просмотра ид.

0

Я отвечаю сам. Согласно сообщению на click home icon with espresso, невозможно указать Id для кнопки «Главная» в ActionBar, по крайней мере, с версией 7 библиотеки поддержки, поэтому мы должны использовать «Навигация вверх». Но почему?

Это причина, благодаря ошибке следа Эспрессо:

--------> 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 
      } 
| 
-1

Я не знал, что такая большая разница, используя панель действий AppCompat в. Как вы, ребята, писали в комментариях, «navigate up» действительно работает. Для тех, кто, как я, не может считаться, как сделать это с помощью эспрессо, вот так:

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());

Depracated для AppCompat v7

В моем проекте я используя Robotium и Espresso вместе. Для кнопки «домой» я использую Robotiums Solo#clickOnActionBarHomeButton. Это больше, чем 1 строка, как в click home icon with espresso , но вам не нужно указывать название. (Это может быть полезно в некоторых особых случаях ...). В любом случае я решить, какой из них использовать по версии 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();. Возможно, это сработает для вас.

14

Можно щелкнуть по кнопке, когда вы используете описание из ресурсов.

onView(withContentDescription(R.string.abc_action_bar_up_description)).perform(click()); 

отлично работает с AppCompat-v7: 23.1.1

+0

Имейте в виду, что 'R.string.abc_action_bar_up_description' является закрытым и может быть изменен в любое время.Но пока что, это был лучший вариант, который я мог найти. –