2014-05-21 14 views
12

मैं के साथ एक एस्प्रेसो परीक्षण के हिस्से के रूप में एक EditText अद्यतन करने के लिए प्रयास कर रहा हूँ के साथ एक EditText अपडेट कर रहा है:एस्प्रेसो

onView(allOf(withClassName(endsWith("EditText")), withText(is("Test")))).perform(clearText()) 
                     .perform(click()) 
                     .perform(typeText("Another test")); 

हालांकि मैं निम्न त्रुटि प्राप्त:

com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No views in hierarchy found matching: (with class name: a string ending with "EditText" and with text: is "Test") 

परीक्षण टूट तक लाइन मैं देख सकता हूं कि यह clearText() करने के बाद होता है, इसलिए मुझे लगता है कि प्रत्येक perform से पहले मैचर्स को फिर से चलाया जा रहा है और दूसरी क्रिया से पहले विफल हो जाता है। यद्यपि यह समझ में आता है, यह मुझे एस्प्रेसो का उपयोग करके EditText को अपडेट करने के तरीके के बारे में कुछ उलझन में डाल देता है। मुझे यह कैसे करना चाहिए?

ध्यान दें कि मैं इस परिदृश्य में संसाधन आईडी या इसी तरह का उपयोग नहीं कर सकता हूं और सही दृश्य की पहचान करने के लिए ऊपर दिखाए गए संयोजन का उपयोग करना होगा।

उत्तर

1

आप दो चीजों को आजमा सकते हैं। सबसे पहले मैं

onView(withId(<id>).perform... 

उपयोग करने के लिए इस तरह आप हमेशा EditText क्षेत्र भी जब अन्य EditText क्षेत्रों स्क्रीन पर कर रहे हैं के लिए उपयोग किया जाएगा की कोशिश करेंगे।

यदि यह कोई विकल्प नहीं है, तो आप अपनी प्रदर्शन कॉल को विभाजित कर सकते हैं।

onView(allOf(withClassName(endsWith("EditText")),withText(is("Test")))).perform(clearText()); 
onView(withClassName(endsWith("EditText"))).perform(click()); 
onView(withClassName(endsWith("EditText"))).perform(typeText("Another Test"); 
+0

प्रतिक्रिया के लिए धन्यवाद देख सकते हैं। दुर्भाग्यवश गतिविधि में कई संपादन टेक्स्ट हैं, जो प्रोग्राम के बिना प्रोग्राम किए गए हैं, इसलिए इन सुझावों में से कोई भी काम नहीं करेगा। – jgm

+0

मैं देखता हूं। शायद आप उस टैग के आधार पर आपके द्वारा बनाए गए प्रत्येक संपादन टेक्स्ट में एक टैग सेट कर सकते हैं और दृश्य ढूंढ सकते हैं। टैग का उपयोग केवल परीक्षण के लिए किया जा सकता है, लेकिन यह आपको कम से कम संपादन टेक्स्ट फ़ील्ड को अलग करने के लिए कुछ देगा। फिर फिर, यह आपके प्रश्न के अंत में बताई गई शर्त का उल्लंघन कर सकता है (मैंने जवाब देने से पहले उस हिस्से को अनदेखा किया)। – Maxwell

8

तीन बातें करने की कोशिश करना:

1. आप लगातार प्रदर्शन चला सकते हैं।

onView(...) 
    .perform(clearText(), typeText("Some Text")); 

2. एक recorded issue on the Espresso page जो अमान्य के रूप में चिह्नित किया गया था (लेकिन अभी भी बहुत ज्यादा एक बग है) नहीं है। इसके लिए एक वर्कअराउंड प्रदर्शन के बीच परीक्षण को रोकना है।

public void test01(){ 
    onView(...).perform(clearText(), typeText("Some Text")); 
    pauseTestFor(500); 
    onView(...).perform(clearText(), typeText("Some Text")); 
} 

private void pauseTestFor(long milliseconds) { 
    try { 
     Thread.sleep(milliseconds); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

3. आप पूरी तरह सुनिश्चित करें कि आपके EditText पाठ, "टेस्ट" में शामिल हैं?

20

आप replaceText विधि का उपयोग कर सकते हैं।

onView(allOf(withClassName(endsWith("EditText")), withText(is("Test")))).perform(replaceText("Another test")); 
+0

replaceText() फ़ंक्शन काम करता है! उसने मुझे बचाया। ऐसा लगता है कि typeText() में इनपुट कीबोर्ड के साथ कुछ समस्याएं हैं। – herbertD

2

मैं एक ऐसी ही समस्या हो रही है और containsString मिलान और Class.getSimpleName() का उपयोग कर इसे हल किया गया था। इस तरह:

onView(withClassName(containsString(PDFViewPagerIVZoom.class.getSimpleName()))).check(matches(isDisplayed())); 

पूर्ण कोड here

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