2013-10-30 15 views
6

एस्प्रेसो का उपयोग करके लिस्ट व्यू के एक विशिष्ट बच्चे पर क्लिक करके, मैं एक विस्तार योग्य लिस्ट व्यू (कस्टमएक्सपेन्डेबल व्यू नामक) के एक विशिष्ट बच्चे पर क्लिक करने में सक्षम होना चाहता हूं। सूचीदृश्य रिलेटिव लेआउट्स (नाम MyContainer) का एक सेट बनाता है।एस्प्रेसो

आदर्श रूप में, मैं कस्टमएक्सपेन्डेबल व्यू में एक विशिष्ट MyContainer पर क्लिक करना चाहता हूं। लेकिन, मैं बस पहले ही क्लिक करके रह सकता हूं।

MyContainer ऑब्जेक्ट्स में अद्वितीय आईडी नहीं हैं जिन्हें मैं संदर्भित कर सकता हूं, लेकिन उनके बच्चे करते हैं, उदा। - "पाठ = नमूना पाठ यहाँ 1"

मैंने वर्ग प्रकार को पार करने और किसी विशिष्ट स्थिति पर बच्चे को प्राप्त करने की कोशिश करने के कुछ अलग-अलग बदलावों की कोशिश की है, लेकिन यह अभी काम नहीं कर रहा है। और, जब तक मुझे सही बच्चा नहीं मिला, तब तक मैं ऑब्जेक्ट प्राप्त करने और उस पर फिर से चलने से बचना चाहता था।

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

उत्तर

0

प्रयास करें instanceof उदाहरण, एक hasSibling मिलान के साथ मिलकर:

यहाँ संदर्भ के लिए दृश्य पदानुक्रम के भाग (मैं पदानुक्रम से गैर महत्वपूर्ण जानकारी हटा दिए गए) है

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

यह त्रुटि लौटा रहा है। ऑन व्यू को Matcher की आवश्यकता है और यह Matcher लौटा रहा है। आपने OnView में कोई दृश्य ऑब्जेक्ट निर्दिष्ट नहीं किया है। – Khushboo

+0

@ कुशबू, तो इसे डेटा पर स्विच करें। –

0

आप यहाँ EspressoSamples सीधे Google द्वारा प्रदान का पालन कर सकते हैं।
आपको onData() का उपयोग उदाहरण के लिए करना है

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

जब आप onData उपयोग करने के लिए कोशिश कर रहा है, एस्प्रेसो (Adapter#getItem फोन करके) इस अनुकूलक में डेटा के लिए खोज कुछ पैरामीटर के आधार पर देखते नहीं लगता है, लेकिन ListView की Adapter हो और कोशिश करता है।

लेकिन ExpandableListView के मामले में यह स्पष्ट नहीं है कि डेटा क्या प्राप्त होगा। और इस उद्देश्य के लिए एस्प्रेसो ने onData...().usingAdapterViewProtocol(AdapterViewProtocol) प्रदान किया। इस विधि जावाडोक का कहना है: 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) */

यह AdapterViewProtocol इंटरफ़ेस की तरह दिखता है।

AdapterViewProtocol कार्यान्वयन के उदाहरण: https://stackoverflow.com/a/40282991/1282732

सही ढंग से परिभाषित करने के बाद, onData आइटम मिलेगा आपके द्वारा खोजे देखने। उसके बाद, अगर आपको कोई कार्रवाई करने या बच्चे को जांचने की ज़रूरत है। आपको बस onData#onChildView होना चाहिए।

संबंधित मुद्दे