2013-10-30 18 views
6

Espresso'yu kullanarak, bir ExpandableListView (CustomExpandableView) adlı çocuğun belirli bir çocuğunu tıklayabiliyorum. Liste görünümü bir dizi RelativeLayouts (MyContainer olarak adlandırılır) oluşturur.Espresso'nun belirli bir çocuğunun üzerine tıklanması

İdeal olarak, CustomExpandableView'da belirli bir MyContainer'ı tıklatmak isterim. Ama ben sadece ilkini tıklatarak yaşayabilirim.

MyContainer nesnelerine başvurduğum benzersiz bir kimliği yok, ancak çocukları, ör. - "text = Örnek Metin Burada 1"

Sınıf türünü geçirerek ve belirli bir konumdaki bir çocuğa sahip olmaya çalışarak onData'yi kullanmaya çalışmanın birkaç farklı varyasyonunu denedim, ancak çalışmaz. Ve nesneyi almaktan ve doğru çocuğu bulana kadar üzerinde durmaktan kaçınmak istedim.

 
+----->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} 
| 

cevap

0

InstanceOf örneğin hasSibling eşleştirici bağlanmış deneyin ortalama:

referans görünümü hiyerarşi kısmı (hiyerarşide olmayan önemli bilgi çıkarılır) olduğu

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

Bu bir hata döndürüyor. OnView, Matcher gerektirir ve bu, Matcher 'u döndürmektir. OnView'de hiçbir görünüm nesnesi belirtmediniz. – Khushboo

+0

@Khushboo, bu yüzden onData'ya geçin. –

0

Doğrudan Google'dan temin edebilirsiniz EspressoSamples.
onData() ürününü kullanmanız gerekir.

Eğer onData kullanmaya çalışıyor
onData(allOf(is(instanceOf(Map.class)), hasEntry(equalTo("STR"), is("item: 50"))) 
    .perform(click()); 
0

, Espresso değil bulmak bazı Parametreleri ile görüntüleyebilir, ancak ListView ait Adapter almak ve (Adapter#getItem çağırarak) Bu adaptörü veri aramak çalışır.

Ancak, ExpandableListView durumunda, hangi verilerin elde edileceği açık değildir. Ve bu amaçla Espresso onData...().usingAdapterViewProtocol(AdapterViewProtocol) sağladı. Bu yöntem javadoc diyor: 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:

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

Bu AdapterViewProtocol arayüzü gibi görünüyor. AdapterViewProtocol uygulamasının

Örnekler: https://stackoverflow.com/a/40282991/1282732

doğru tanımladıktan sonra, onData öğeyi bulacaksınız Aradığınız görüntüleyin. Bundan sonra, bir eylemi gerçekleştirmeniz veya çocuğunuzu kontrol etmeniz gerekiyorsa. Sadece onData#onChildView'u kullanmalısınız.

İlgili konular