2016-09-21 2 views
1

У меня есть тест ниже эспрессо:Эспрессо: вызов openActionBarOverflowOrOptionsMenu() открывает первый пункт в меню

openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); 

    // if I Thread.sleep() here, I can see that the MenuItem has been clicked already 

    onView(withText("Sign in")) //<= click on the MenuItem 
      .perform(click()); 

    onView(withId(R.id.signupButton)) //<= click the signup button in my UI 
      .perform(click()); 

Первая линия там открывает дополнительное меню и нажимает на первый элемент в то же время (что является элементом signin). Таким образом, тест терпит неудачу, потому что он не может найти представление MenuItem. Я что-то делаю неправильно? Я использую эмулятор API 22, компилируя снова targetSdk 24 и используя espresso 2.2.1.

+0

Я полагаю, что вы используете правило ActivityTest в своем тестовом классе. Пожалуйста, попробуйте использовать 'openActionBarOverflowOrOptionsMenu (mActivityRule.getActivity());' – piotrek1543

+0

та же проблема :-( – mbonnin

ответ

0

Попробуйте это:

public class EspressoMatchers {  
    public static Matcher<View> withOverflowMenuButton() { 
     return anyOf(allOf(isDisplayed(), withContentDescription("More options")), 
       allOf(isDisplayed(), withClassName(endsWith("OverflowMenuButton")))); 
    } 
} 

Чтобы открыть меню переполнения:

onView(allOf(EspressoMatchers.withOverflowMenuButton(), 
      isDescendantOfA(withId(R.id.toolbar)))).perform(click()); 

Затем он должен работать нормально. Просто используйте правильный ID для вашего Toolbar. Я знаю, что это всего лишь копия класса Espresso, но я также столкнулся с этой проблемой, и это помогло мне.

Пожалуйста, не забудьте всегда нажимать пункты меню «по имени», а не их идентификатором, поскольку идентификатор не будет работать. Таким образом, ваш «элемент клика» должен быть хорошим:

onView(withText("Sign in")) //<= click on the MenuItem 
     .perform(click()); 
+0

та же проблема :-( – mbonnin

+0

@mbonnin вы отключили анимацию на своем тестовом устройстве? – tomrozb

Смежные вопросы