के साथ रीसाइक्लर व्यू आइटम पर क्लिक करने का प्रयास करते समय मैं एक साधारण एस्प्रेसो परीक्षण करने की कोशिश कर रहा हूं जो RecyclerView
में पहले आइटम को विशिष्ट लेबल के बिना मिलेगा और उस पर क्लिक करें। इस तरह परियोजना इस मैं espresso-contrib
जोड़ा लक्ष्य को हासिल करने के लिए:कोई वर्चुअल विधि नहीं है ViewHolderForPosition (I) जब एस्प्रेसो
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
// Necessary to avoid version conflicts
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'design'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'recyclerview-v7'
}
और अपने परीक्षण के मामले में निम्नलिखित अभिव्यक्ति लिखा है: onView(withId(R.id.sresults_list_recycler)).perform(RecyclerViewActions.actionOnHolderItem(new FirstNotSoldOutMatcher(), click()).atPosition(1));
Matcher पूरी तरह से काम करता है और RecyclerView
लक्ष्य आइटम पर स्क्रॉल किया गया। लेकिन फिर मुझे त्रुटि मिलती है:
java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in /data/app/com.example-1/base.apk)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:288)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemViewAction.perform(RecyclerViewActions.java:232)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
यह मेरे लिए अजीब लग रहा है। मैंने Google दस्तावेज़ में पढ़ा है कि findViewHolderForPosition
विधि अब बहिष्कृत है लेकिन यह अभी भी वहां होना चाहिए। मेरे पास ऐप में मल्टीडेक्स सक्षम है लेकिन दस्तावेज़ों के मुताबिक इसे बॉक्स से बाहर समर्थित किया गया है, इसलिए समस्या भी नहीं होनी चाहिए।
क्या आपको पता है कि इस परीक्षण में क्या गलत हो सकता है?
मुझे एक ही समस्या थी। यह समाधान काम करता है। धन्यवाद आदमी! –
@ बर्श क्यों 'proguardFiles' में और 'testProguardFiles' में नहीं? वे सिर्फ परीक्षणों के लिए होना चाहिए ... – Caipivara
@ कैपिवार जैसा कि मुझे याद है कि 'testProguardFiles' केवल परीक्षण कोड (टेस्ट एपीके में) के लिए लागू होते हैं, जबकि हमें ऐप में विधियों को रखने की आवश्यकता होती है – Bersh