OnChildView и hasSiblings с эспрессо

Я пытаюсь получить доступ к кнопке с определенного вида. Тот же вид отображается 6 раз. Это код, который я использую.

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

Когда я бегу, я получаю сообщение об ошибке:

Ошибка выполнения «данных адаптера нагрузки» в представлении «назначается из класса: класс android.widget.AdapterView».

Это лучший способ получить доступ к детскому представлению? Если да, то как?

РЕДАКТИРОВАТЬ

Это код, который я пытаюсь использовать сейчас.

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

а также

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

С этой ошибкой:

  No views in hierarchy found matching 

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> 

Вид xml, который используется 6 раз.

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

Это ImageView с increaseGoalButton idGoalButton, который я пытаюсь щелкнуть.

Solutions Collecting From Web of "OnChildView и hasSiblings с эспрессо"

На основе вашего последнего комментария вы должны использовать onView() вместо onData() . Я думаю, вы сможете нажать кнопку, используя hasSibling() – пример

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

Или примеры без вашего пользовательского совпадения (у сестры есть текст):

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

Или (представление для сестер имеет описание содержимого):

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

Редакция:

Хорошо, я бы попробовал эти два варианта:

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

или

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

Ни одно из ваших описаний содержимого не соответствует строковому описанию, поэтому оно ничего не находит.

Предполагая, что идентификатор кнопки является R.id.positive, и идентификатор уникален в текущем представлении активности, вы можете просто использовать:

 onView(withId(R.id.positive)).perform(click());