2013-10-30 8 views
6

Korzystając z Espresso, chciałbym móc kliknąć konkretne dziecko z ExpandableListView (o nazwie CustomExpandableView). Listview tworzy zestaw RelativeLayouts (o nazwie MyContainer).Kliknięcie na konkretne dziecko z ListView w Espresso

Idealnie chciałbym kliknąć konkretny obiekt MyContainer w CustomExpandableView. Ale mogę żyć tylko jednym kliknięciem.

Obiekty MyContainer nie mają unikalnych identyfikatorów, do których mogę się odwoływać, ale ich dzieci np. - "text = Sample Text Here 1"

Próbowałem kilku różnych odmian używania onData przekazując typ klasy i próbując uzyskać dziecko w określonej pozycji, ale to po prostu nie działa. I, chciałem uniknąć pobierania obiektu i powtarzania go, dopóki nie znalazłem właściwego dziecka.

Oto część widoku hierarchii odsyłającym (I usunięte bez ważnej informacji z hierarchii):

 
+----->CustomExpandableView{} 
| 
+------>LinearLayout{} 
| 
+------->TextView{} 
| 
+------->FrameLayout{} 
| 
+-------->BreadCrumbView{} 
| 
+--------->ImageButton{} 
| 
+--------->TextView{} 
| 
+------>LinearLayout{} 
| 
+------->MyContainer{} 
| 
+-------->ImageView{res-name=thumb, } 
| 
+-------->ImageView{res-name=divider} 
| 
+-------->TextView{res-name=label, text=Sample Text Here 1, input-type=0, ime-target=false} 
| 
+------->MyContainer{} 
| 
+-------->ImageView{res-name=thumb} 
| 
+-------->ImageView{res-name=divider} 
| 
+-------->TextView{res-name=label text=Sample Text Here 2, input-type=0, ime-target=false} 
| 

Odpowiedz

0

Spróbuj instancją połączeniu z hasSibling dopasowującego np

onView(allOf(is(instanceOf(MyContainer.class)), hasSibling(withText("Sample Text Here 1")))) 
+0

Powoduje to błąd zwrócenia. OnView wymaga Matchera i jest to zwrot Matchera . Nie określono żadnego obiektu widoku w OnView. – Khushboo

+0

@ Chushboo, więc przełącz go na onData. –

0

Możesz śledzić dostarczone bezpośrednio przez Google tutaj EspressoSamples.
Musisz użyć onData(), np.

onData(allOf(is(instanceOf(Map.class)), hasEntry(equalTo("STR"), is("item: 50"))) 
    .perform(click()); 
0

Podczas próby użycia onData, espresso stara się nie znaleźć zobaczyć przez niektóre params, ale dostać Adapter z ListView i wyszukiwać dane w tym adapterem (wywołując Adapter#getItem).

Jednak w przypadku ExpandableListView nie jest oczywiste, jakie dane uzyskać. I w tym celu Espresso pod warunkiem onData...().usingAdapterViewProtocol(AdapterViewProtocol). Metoda ta javadoc mówi:

interfejs

/** * Use a different AdapterViewProtocol if the Adapter implementation does not * satisfy the AdapterView contract like (@code ExpandableListView) */

to AdapterViewProtocol wygląda następująco: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/com/google/android/apps/common/testing/ui/espresso/action/AdapterViewProtocol.java.

Przykłady AdapterViewProtocol realizacji: https://stackoverflow.com/a/40282991/1282732

Po prawidłowym zdefiniowaniem, onData znajdzie przedmiot zobaczyć szukałeś. Następnie, jeśli musisz wykonać akcję lub sprawdzić dziecko. Po prostu powinieneś onData#onChildView.

Powiązane problemy