title: How to access RecyclerView ViewHolder with Espresso?
body: <p>I want to test the text contained in each <code>ViewHolder</code> of my <code>RecyclerView</code>:</p>
  
  <pre><code>@RunWith(AndroidJUnit4.class)
  public class EspressoTest {
  
      private Activity mMainActivity;
      private RecyclerView mRecyclerView;
      private int res_ID = R.id.recycler_view_ingredients;
      private int itemCount = 0;
  
      //TODO: What is the purpose of this rule as it relates to the Test below?
      @Rule
      public ActivityTestRule&lt;MainActivity&gt; firstRule = new ActivityTestRule&lt;&gt;(MainActivity.class);
  
  
      //TODO: Very confused about Espresso testing and the dependencies required; it appears Recyclerview
      //TODO: Requires additional dependencies other than those mentioned in the Android documentation?
      //TODO: What would be best method of testing all views of RecyclerView? What is there is a dynamic number of Views that are populated in RecyclerView?
  
  
      //TODO: Instruction from StackOverflow Post: https://stackoverflow.com/questions/51678563/how-to-test-recyclerview-viewholder-text-with-espresso/51698252?noredirect=1#comment90433415_51698252
      //TODO: Is this necessary?
      @Before
      public void setupTest() {
          this.mMainActivity = this.firstRule.getActivity();
          this.mRecyclerView = this.mMainActivity.findViewById(this.res_ID);
          this.itemCount = this.mRecyclerView.getAdapter().getItemCount();
  
      }
  
      @Test
      public void testRecyclerViewClick() {
          Espresso.onView(ViewMatchers.withId(R.id.recycler_view_ingredients)).perform(RecyclerViewActions.actionOnItemAtPosition(1, ViewActions.click()));
      }
  
      //CANNOT CALL THIS METHOD, THE DEPENDENCIES ARE INCORRECT
      @Test
      public void testRecyclerViewText() {
          // Check item at position 3 has "Some content"
          onView(withRecyclerView(R.id.scroll_view).atPosition(3))
                  .check(matches(hasDescendant(withText("Some content"))));
  
  
          }
       }
  }
  </code></pre>
  
  <p>Below is my gradle as well, I never understood what separate dependencies are required for RecyclerView testing:</p>
  
  <pre><code>dependencies {
      implementation fileTree(dir: 'libs', include: ['*.jar'])
      implementation 'com.android.support:recyclerview-v7:27.1.1'
      implementation 'com.google.android.exoplayer:exoplayer:2.6.1'
      implementation 'com.android.support:appcompat-v7:27.1.1'
      implementation 'com.android.support.constraint:constraint-layout:1.1.2'
      implementation 'com.android.support:support-v4:27.1.1'
      testImplementation 'junit:junit:4.12'
      androidTestImplementation 'com.android.support.test:testing-support-lib:0.1'
      androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.0'
      androidTestImplementation('com.android.support.test.espresso:espresso-contrib:2.0') {
          exclude group: 'com.android.support', module: 'appcompat'
          exclude group: 'com.android.support', module: 'support-v4'
          exclude module: 'recyclerview-v7'
      }
      implementation 'com.android.support:support-annotations:27.1.1'
      implementation 'com.squareup.okhttp3:okhttp:3.10.0'
      implementation 'com.google.code.gson:gson:2.8.2'
      implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
      implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
      androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
      implementation 'com.android.support:cardview-v7:27.1.1'
      implementation 'com.google.android.exoplayer:exoplayer:2.6.0'
  }
  </code></pre>
  
  <p>Also, what if the <code>RecyclerView</code> populates data dynamically? Then you simply could not hard code the position you wanted to test....</p>