2015-01-11 11 views
15

मैं एक Android ऐप्लिकेशन के साथ स्वचालित यूआई परीक्षण बाहर ले जाने के एस्प्रेसो उपयोग किया गया है का चयन करें। (मैं काम से घर पर, जबकि इस मुद्दे के लिए एक प्रस्ताव को खोजने के लिए मैं सटीक उदाहरण और त्रुटियों की जरूरत नहीं है मैं कल सुबह अद्यतन कर सकते हैं की कोशिश कर दिया गया है, तो है, लेकिन)। मैंने एक लेआउट के भीतर यूनिट परीक्षण बटन के साथ एक समस्या में भाग लिया है जिसमें एकल उपयोगकर्ता इंटरफ़ेस के भीतर कई बार शामिल किया गया है।एस्प्रेसो शामिल लेआउट के बच्चों

<include 
    android:id="@+id/include_one" 
    android:layout="@layout/boxes" /> 

<include 
    android:id="@+id/include_two" 
    android:layout="@layout/boxes" /> 

<include 
    android:id="@+id/include_three" 
    android:layout="@layout/boxes" /> 

यहाँ @ लेआउट/बॉक्स के भीतर है का एक उदाहरण है: नीचे एक त्वरित उदाहरण है

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:id="@+id/button1" /> 
    <Button 
     android:id="@+id/button2" /> 
</RelativeLayout> 

मैं उचित रूप में शामिल हैं मैं चाहता हूँ "include_one" के भीतर बटन एक का उपयोग करने में असमर्थ हूँ , सभी तीन बटनों तक पहुंच के बिना।

मैं निम्नलिखित के साथ बटन तक पहुँचने की कोशिश की है:

onView(allOf(withId(R.id.include_one), isDescendantOfA(withId(R.id.button1)))).perform(click()); 

और

onView(allOf(withId(R.id.button1), hasParent(withId(R.id.include_one)))).perform(click()); 

जो दोनों मैं इस जवाब से मिला: onChildView and hasSiblings with Espresso दुर्भाग्य से मैं किसी भी सफलता नहीं किया था!

मैं जानता हूँ कि इस महान नहीं है, लेकिन के रूप में मैं अपने काम कंप्यूटर के साथ नहीं कर रहा हूँ मैं तुम्हें सही त्रुटियों मैं सामने आने वाले नहीं बता सकता, लेकिन मैं सामना करना पड़ा:

com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException 

भी एक त्रुटि मुझे बता रहा था कि कोई मैच नहीं मिला था।

मैं जिस कोड का उपयोग कर रहा हूं वह समझ में आता है, हालांकि मैं एस्प्रेसो का उपयोग करने के लिए नया हूं, कोई भी कुछ सलाह दे सकता है या बता सकता है कि मुझे गलतफहमी क्या हो सकती है?

उत्तर

15

<include/> एक ही लेआउट में एक ही कस्टम xml कई बार कोशिश करते समय यह एक आम गड़बड़ है।

आप अब

Button button1 = (Button) findViewById(R.id.button1); 

बुला के बाद से boxes.xml एक बार से अधिक शामिल किया गया है की कोशिश, तो आप हमेशा एक परिणाम के रूप बटन पहले उप लेआउट में मौजूद है, और कभी नहीं एक दूसरे से मिल जाएगा।

आप बहुत करीब थे, लेकिन आप withParent() दृश्य मिलान का उपयोग करने की जरूरत है।

onView(allOf(withId(R.id.button1), withParent(withId(R.id.include_one)))) 
       .check(matches(isDisplayed())) 
       .perform(click()); 
+0

प्रतिक्रिया के लिए धन्यवाद! जब मैंने इस मुद्दे को ठीक किया तो मुझे वास्तव में इसका जवाब देना चाहिए था। लेकिन आप सही हैं, जब मैं इस समस्या पर काम कर रहा था, तो सही बटन का चयन करने के लिए मेरे पास एक जटिल चयनकर्ता था। –

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