2016-09-03 12 views
6

समाप्त करने के लिए पुनर्नवीनीकरण स्क्रॉल एस्प्रेसो का उपयोग कर रीसाइक्लर्विव के अंत तक स्क्रॉल करने का कोई तरीका है?एस्प्रेसो:

टेक्स्ट के साथ एक आइटम है जो 'टेक्स्ट XYZ' कहता है और रीसाइक्लिंगव्यू में एक आईडी रीसाइक्लर_व्यू है। यह आइटम पुनर्चक्रण दृश्य का अंतिम आइटम होता है।

मैं

onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click()); 

की कोशिश की लेकिन यह काम करने के लिए प्रतीत नहीं होता। कोई विचार? ViewHolder, जो एडाप्टर के onCreateViewHolder() में हवा भरी जाती है की ItemView के खिलाफ

+0

काम नहीं कर रहा है - त्रुटि लॉग कृपया – piotrek1543

+0

आप देख रहे हैं कि उस दृश्य को स्क्रॉल करने से पहले प्रदर्शित किया गया है। – denys

+0

@denys ckeck वास्तविक पुनर्चक्रण के लिए है। इसे तब तक कोई फर्क नहीं पड़ता जब तक कि रीसाइक्लिंगव्यू वास्तव में प्रदर्शित नहीं होता है। –

उत्तर

13

RecyclerViewActions.scrollTo() मैचों। और काम करने के लिए scrollTo() के लिए, आपको एक मैचर प्रदान करने की आवश्यकता है जो विशिष्ट रूप से ItemView की पहचान करे।

आपकी वर्तमान मिलान एस्प्रेसो बताता है एक ViewHolder कि एक itemView के रूप में एक TextView से फुलाया गया था करने के लिए स्क्रॉल करने के लिए। जो हो सकता है, लेकिन आम तौर पर आपके पास कुछ ViewGroup कार्रवाई होती है ताकि दृश्य धारकों को जिस तरीके से आप देखना चाहते हैं उन्हें शैलीबद्ध कर सकें।

आप अपने scrollTo() Matcher बदलते हैं, तो hasDescendant(withText("Text XYZ")) करने के लिए सभी नेस्टेड लेआउट के लिए खाते (यदि वहाँ एक से अधिक)।

यह भी ध्यान रखें, क्योंकि आप भी आइटम क्लिक करने की कोशिश कर रहे हैं - आप एक ही perform() में यह नहीं कर सकते क्योंकि वह वर्तमान ViewInteraction लिए क्लिक करें, जो इस मामले आईडी R.id.recycler_view के साथ एक RecyclerView में है भेज देंगे। उसी प्रदर्शन में ऐसा करने से आप RecyclerView पर मध्य पर क्लिक करते हैं, न कि जिस आइटम को आपने स्क्रॉल किया था।

इसे हल करने के लिए आपको किसी अन्य आइटम को स्क्रॉल करने के लिए उपयोग किए जाने वाले मैचर के साथ onView() की आवश्यकता है या RecyclerView.actionOnItem() का उपयोग करें।

एक और onView() बयान के मामले में, hasDescendant(withText("Text XYZ")), आप असफल क्योंकि यह उस TextView (viewholder, recyclerview, viewgroup कि recyclerview और इतने पर रखती है) वे सभी इस विशेष वंशज है के रूप में के सभी माता-पिता मिल जाएगा होगा। यह आपको ItemView मैचर को अधिक सटीक और सभी नेस्टेड लेआउट के लिए खाता बनाने के लिए मजबूर करेगा। इन परिस्थितियों में मेरा सामान्य मटर पर withChild() है, लेकिन यह आपके लिए अलग हो सकता है।

+0

बहुत बढ़िया, धन्यवाद, पूरी तरह से काम करता है! इस दृश्य पर smth होना चाहिए (withId (R.id.rvSettings))। जांचें (मैचों (isDisplayed()))। (RecyclerViewActions.scrollTo (हैडेंडेंडेंट (withText (stringId))); –

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