2016-11-28 2 views
2

Я использую futuresimple's Android Floating Action Button. Я бы хотел использовать Espresso для создания тестов интерфейса, которые взаимодействуют с ним. multiple_actions - это просто кнопка, открывающая меню плавающей кнопки (FAB). draw_fab - одна из кнопок плавающего действия, которая появляется, когда вы нажимаете multiple_actions. Нажав draw_fab, вы начинаете новую деятельность в андроиде, и в этой операции я хочу нажать стандартную кнопку с идентификатором componentMenuButton (что само вызывает меню).Тест Espresso UI на элементах меню Android Floating Action Button

@Test 
public void simpleCircuitTest() { 
    onView(withId(R.id.multiple_actions)).perform(click()); 
    onView(withId(R.id.draw_fab)).perform(click()); 
    onView(withId(R.id.componentMenuButton)).perform(click()); 
    // other stuff... 
} 

Когда я запускаю этот тест, я вижу, что первый щелчок работает и отображаются кнопки плавающего меню. Однако вызов нажать draw_fab, кажется, имеет нулевой аффект, и как таковой я получаю ошибку No views in hierarchy found matching: with id... при достижении вызова нажать componentMenuButton.

Здесь я смущаюсь.

@Test 
public void simpleCircuitTest() { 
    onView(withId(R.id.draw_fab)).check(matches(isDisplayed())); 
    View v = mActivityRule.getActivity().findViewById(R.id.draw_fab); 
    Log.d(TAG, String.valueOf(v.getVisibility()==v.VISIBLE)); 
    Log.d(TAG, String.valueOf(v.isShown())); 
    Log.d(TAG, String.valueOf(v.isEnabled())); 

    onView(withId(R.id.multiple_actions)).perform(click()); 
    onView(withId(R.id.draw_fab)).check(matches(isDisplayed())); 
    Log.d(TAG, String.valueOf(v.getVisibility()==v.VISIBLE)); 
    Log.d(TAG, String.valueOf(v.isShown())); 
    Log.d(TAG, String.valueOf(v.isEnabled())); 
} 

Выше моя попытка выяснить, что происходит. Когда я запускаю этот тест, хотя я еще не нажал на multiple_actions FAB, isDisplayed проходит, и все выходные данные журнала верны. А затем в следующем сегменте Espresso нажимает multiple_actions и снова все выходные данные верны. Таким образом, если вы нажмете на multiple_actions, вы получите draw_fab, чтобы щелкнуть нулевым ударом на прохождение теста. Это не так, как должно быть?

Моя догадка заключается в том, что репо, которое я использую для плавающих кнопок действий, просто не поддерживает использование эспрессо? Это или есть что-то особенное в отношении FAB или что-то общее о Espresso, которое мне не хватает. Что он?

ответ

1

Если я смотрю на свою activity_home.xml для деятельности я пытаюсь проверить у меня есть следующие за FABs (Плавающие Кнопки действий)

<com.getbase.floatingactionbutton.FloatingActionsMenu 
    android:id="@+id/multiple_actions" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    fab:fab_addButtonColorNormal="@color/colorPrimary" 
    fab:fab_addButtonColorPressed="@color/white_pressed" 
    fab:fab_addButtonPlusIconColor="@color/white" 
    fab:fab_labelStyle="@style/menu_labels_style" 
    android:layout_marginBottom="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginEnd="16dp"> 

    <com.getbase.floatingactionbutton.FloatingActionButton 
     android:id="@+id/draw_fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     fab:fab_colorNormal="@color/colorPrimary" 
     fab:fab_title="Draw Circuit" 
     fab:fab_colorPressed="@color/white_pressed" 
     fab:fab_icon="@drawable/ic_draw"/> 

Так что я, естественно, подумал, что multiple_actions идентификатор может быть использован для нажмите FAB, который открывает меню FAB. Однако, глядя на values.xml у меня есть в моем проекте, который был сгенерирован библиотекой FAB я использую я вижу

<item name="fab_expand_menu_button" type="id"/> 

Это, вероятно, происходит от here. Используя этот идентификатор (который я не писал), все исправлено. Я предполагаю, что идентификатор FAB жестко закодирован для верхнего уровня.

@Test 
public void simpleCircuitTest() { 
    onView(withId(R.id.fab_expand_menu_button)).perform(click()); 
    onView(withId(R.id.draw_fab)).perform(click()); 
    onView(withId(R.id.componentMenuButton)).perform(click()); 
    // other stuff... 
} 

Более интересно, когда я использую multiple_actions я понял, он давит в другом месте на экране (не понял, так как не было никакой визуальной обратной связи, но потом я поставил HorizontalScrollView, чтобы занять весь экран и достаточно уверенный Я вижу, что Espresso нажимает на нее), что позволяет понять, почему эти значения журнала всегда верны. Значения верны для другого элемента на экране, который не привязан к тому, чтобы быть видимым или нет, нажав FAB

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