Еспресо - щракнете върху изображение в мрежа

Имам йерархия на изгледи като по-долу:

GridView{id=2131362110, res-name=item_list_grid, 
|
+----->RelativeLayout{id=2131362124, res-name=item_image_thumb_layout
|
+------------->ImageView{id=2131362125, res-name=item_image
|
+----->RelativeLayout{id=2131362124, res-name=item_image_thumb_layout
|
+------------->ImageView{id=2131362125, res-name=item_image
|
+------>RelativeLayout{id=2131362124, res-name=item_image_thumb_layout
|
+------------->ImageView{id=2131362125, res-name=item_image
|
GridView{id=2131362110, res-name=item_list_grid, ...etc

Искам да извърша щракване върху един от ImageView с id=item_image.

Не мога да използвам нещо като atPosition(x) заедно с onView, така че вместо това използвах onData. Опитах всички тези:

onData(allOf(anything(),withId(R.id.item_image))).atPosition(0).perform(click());

onData(anything()).atPosition(0).perform(click());

onData(allOf(atPosition(0),withId(R.id.item_image))).perform(click());

Но всичко доведе до

android.support.test.espresso.AmbiguousViewMatcherException: 'is assignable from class: class android.widget.AdapterView' matches multiple views in the hierarchy.

Някакви предложения за това? Благодаря!


person Great Question    schedule 21.01.2015    source източник


Отговори (1)


Вашето съобщение за грешка казва, че имате множество изгледи във вашата дейност, която разширява формуляра AdapterView, така че имате друг ListView или GridView в оформлението си.

Можете или да изберете AdapterView на слоя с данни. Така че изберете това AdapterView с елементи от тип ItemModel

onData(is(instanceOf(ItemModel.class))).atPosition(0)
    .onChildView(withId(R.id.item_image)).perform(click());

или можете да изберете конкретен AdapterView по id

onData(anything()).inAdapterView(withId(R.id.my_grid_view)).atPosition(0).
            onChildView(withId(R.id.item_image)).perform(click());
person David Boho    schedule 21.01.2015
comment
Да, това е вярно. Имам 2 изгледа на мрежата (редактирах въпросите си). Работата е там, че и двата ми изгледа на мрежата имат еднакъв идентификатор. Така че не мога да използвам второто ви решение. Моето временно решение е: onData(instanceOf(Item.class)).atPosition(0).inAdapterView(allOf(withId(R.id.item_list_grid), isDisplayed())).perform(click()); Ще тествам отново първото ви решение, за да видя дали работи. - person Great Question; 21.01.2015
comment
Ако вашите gridviews имат едни и същи идентификатори, вие го правите погрешно. - person JaydeepW; 11.03.2015
comment
това: onData(anything()).inAdapterView(withId(R.id.my_grid_view)).atPosition(0).perform(click()); ми беше достатъчно. tnx :) - person MHSFisher; 11.11.2019