OnChildView y hasSiblings con Espresso

Estoy tratando de acceder a un botón desde una vista específica. La misma vista se muestra 6 veces. Este es el código que estoy usando.

public void testTimeConfig(){ onData(withDesc("description")).onChildView(withId(R.id.positive)).perform(click()); } private static Matcher<Object> withDesc(String desc) { return allOf(is(instanceOf(String.class)), is(desc)); } 

Cuando corro, obtengo un error:

Error al ejecutar 'datos de adaptador de carga' en la vista 'es asignable desde class: class android.widget.AdapterView'.

¿Es esta la mejor manera de acceder a una vista de niño? ¿Si es así, cómo?

EDITAR

Este es el código que estoy intentando usar ahora.

  onView(allOf((withContentDescription("description")), hasSibling(withContentDescription("SettingsLayout")), hasSibling(withId(R.id.positive)))).perform(click()); 

y

  onView(allOf((withContentDescription("description")), hasSibling(withId(R.id.positive)))).perform(click()); 

Con este error:

  No views in hierarchy found matching 

El xml

  <view android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/setAGoalTitle" android:layout_alignParentLeft="true" class="com.xxx" android:layout_marginTop="30dp" android:id="@+id/timeGoalWidget" app:goalLabel="@string/time_min_upper" app:icon="@drawable/ic_icn_summary_time" app:step="300" app:valueFormat="time" android:gravity="center_horizontal" android:layout_marginBottom="60dp" android:contentDescription="setAGoalTimeConfigurator"/> <view android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@id/timeGoalWidget" class="com.xxx" android:id="@+id/distanceGoalWidget" app:goalLabel="@string/distance_upper" app:icon="@drawable/ic_icn_summary_track" app:step="0.25" app:valueFormat="decimal_two" android:gravity="center_horizontal" android:contentDescription="setAGoalDistanceConfigurator"/> <view android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/timeGoalWidget" android:layout_alignLeft="@id/timeGoalWidget" class="com.xxx" android:id="@+id/paceGoalWidget" app:goalLabel="@string/pace_upper" app:icon="@drawable/ic_icn_summary_pace" app:valueFormat="time" app:step="10" android:gravity="center_horizontal" android:layout_marginBottom="60dp" android:contentDescription="setAGoalPaceConfigurator"/> <view android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/distanceGoalWidget" android:layout_alignTop="@id/paceGoalWidget" class="com.xxx" android:id="@+id/speedGoalWidget" app:goalLabel="@string/speed_upper" app:icon="@drawable/ic_icn_summary_speed" app:step="0.5" app:valueFormat="decimal_two" android:gravity="center_horizontal" android:contentDescription="setAGoalSpeedConfigurator"/> <view android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/paceGoalWidget" android:layout_alignLeft="@id/paceGoalWidget" class="com.xxx" android:id="@+id/inclineGoalWidget" app:goalLabel="@string/incline_percent_upper" app:icon="@drawable/ic_icn_summary_elevation" app:step="0.5" app:valueFormat="decimal_two" android:gravity="center_horizontal" android:contentDescription="setAGoalInclineConfigurator"/> <view android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/speedGoalWidget" android:layout_alignTop="@id/inclineGoalWidget" class="com.xxx" android:id="@+id/caloriesGoalWidget" app:goalLabel="@string/calories_upper" app:icon="@drawable/ic_icn_summary_calories" app:step="10" app:valueFormat="decimal_zero" android:gravity="center_horizontal" android:contentDescription="setAGoalCaloriesConfigurator"/> </RelativeLayout> 

El xml de vista que se usa 6 veces.

 <ImageButton android:id="@+id/increaseGoalButton" android:layout_height="@dimen/view_goal_setting_incrementor_button_height_width" android:layout_width="@dimen/view_goal_setting_incrementor_button_height_width" android:background="@drawable/button_goal_widget" android:gravity="center" android:src="@drawable/ic_plus" android:textSize="@dimen/view_goal_setting_incrementor_button_text_size" android:textColor="@color/goal_configuration_widget_button_text_color" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginBottom="1dp" android:contentDescription="@string/increase"/> <ImageButton android:id="@+id/decreaseGoalButton" android:layout_height="@dimen/view_goal_setting_incrementor_button_height_width" android:layout_width="@dimen/view_goal_setting_incrementor_button_height_width" android:background="@drawable/button_goal_widget" android:gravity="center" android:src="@drawable/ic_minus" android:textSize="@dimen/view_goal_setting_incrementor_button_text_size" android:layout_alignParentRight="true" android:textColor="@color/goal_configuration_widget_button_text_color" android:layout_below="@id/increaseGoalButton" android:contentDescription="@string/decrease"/> <LinearLayout android:id="@+id/goalWidgetValueContainer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_toLeftOf="@id/increaseGoalButton" android:layout_centerVertical="true" android:gravity="center_vertical|right" android:layout_marginRight="@dimen/view_goal_setting_value_margin_right" > <TextView android:id="@+id/goalValueTextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="@color/goal_configuration_widget_value_text_color" android:textSize="@dimen/view_goal_setting_value_text_size" android:lineSpacingExtra="-10sp" app:typeface="proxima_bold" android:text="999:00"/> <TextView android:id="@+id/goalValueLabelTextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="right" android:textSize="@dimen/view_goal_setting_value_label_text_size" android:textColor="@color/goal_configuration_widget_value_text_color" android:includeFontPadding="false" android:lineSpacingExtra="10sp" android:text="@string/incline_percent_upper"/> </LinearLayout> 

Es el ImageView con id increaseGoalButton que estoy tratando de hacer clic.

Sobre la base de su último comentario debe utilizar onView() lugar de onData() . Creo que podrás hacer clic en el botón usando hasSibling() – ejemplo

 onView(allOf(withId(R.id.positive), hasSibling(withDesc(someString)))) .perform(click()); 

O ejemplos sin su matcher personalizado (la vista hermana tiene texto):

 onView(allOf(withId(R.id.positive), hasSibling(withText(someString)))) .perform(click()); 

O (la vista del hermano tiene descripción del contenido):

 onView(allOf(withId(R.id.positive), hasSibling(withContentDescription(someString)))) .perform(click()); 

EDITADO:

OK, intentaría estas dos variantes:

 onView(allOf(withId(R.id.increaseGoalButton), isDescendantOfA(withId(R.id.timeGoalWidget)))) .perform(click()); 

o

 onView(allOf(withId(R.id.increaseGoalButton), withParent(withId(R.id.timeGoalWidget)))) .perform(click()); 

Ninguna de las descripciones de contenido coincide con la cadena "descripción" por eso no encuentra nada.

Asumiendo que el ID del botón es R.id.positive, y el identificador es único en la vista de actividad actual, puede utilizar simplemente:

 onView(withId(R.id.positive)).perform(click()); 
  • Robolectric: 3.3.2 - Ningún fichero de manifiesto: build \ intermedios \ manifestos \ lleno \ debug \ src \ main \ AndroidManifest.xml
  • Espresso - haga clic en el texto en la vista de lista
  • Espresso Android que iguala las vistas de texto dentro del padre
  • ChooserActivity no se encuentra con las pruebas Robotium mientras ChooserActivity se muestra en Nexus 5
  • Cómo cambiar / cambiar testInstrumentationRunner dinámicamente con gradle
  • Espresso 2.0 - Método anotado con @Test dentro de la clase extendiendo junit3 testcase
  • Android.util.Pair mantiene String como parámetros en androidTest pero nulo en (unidad) prueba
  • Prueba de Android con Robolectric
  • Archivo de clase para java.nio.file.Path no encontrado
  • El módulo de prueba de Android (Gradle Plugin 1.3) no funciona: "debug-classes not found"
  • Prueba de instrumentación de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.