2017-01-26 4 views
0

У меня есть единичный тест, и я должен нажать на Textview, который находится в первой позиции вида recyler. У меня этот кодНажмите текстовое изображение в RecyclerView с эспрессо

onView(withId(R.id.recyclerViewDevices)) 
       .perform(actionOnItemAtPosition(0, click())); 

, но я хочу, чтобы нажать только в TextView, что в качестве имени «CONNECT» и не во всем позиции. Вы можете мне помочь?

+0

Я думаю, вам нужно использовать onData и onChildView для работы со списками. https://google.github.io/android-testing-support-library/docs/espresso/basics/index.html#using-ondata-with-adapterview-controls-listview-gridview- – Christopher

+0

Возможный дубликат: http://stackoverflow.com/questions/28476507/using-espresso-to-click-view-inside-recyclerview-item – Dibzmania

ответ

0

Вы можете достичь его с помощью пользовательского ViewAction

private class ClickOnTextView implements ViewAction { 

    ViewAction click = click(); 
    int textViewId; 

    public ClickOnTextView(int textViewId) { 
     this.textViewId = textViewId; 
    } 

    @Override 
    public Matcher<View> getConstraints() { 
     return click.getConstraints(); 

    } 

    @Override 
    public String getDescription() { 
     return " click on TextView with id: " + textViewId; 
    } 

    @Override 
    public void perform(UiController uiController, View view) { 
     click.perform(uiController, view.findViewById(textViewId)); 
    } 
} 

Затем измените свой код:

onView(withId(R.id.recyclerViewDevices)).perform(RecyclerViewActions.actionOnItemAtPosition(0, new ClickOnTextView(R.id.CONNECT))); 
+0

ViewAction click = click(); эта строка дает ошибку при нажатии(); – Jose

+0

Добавить в ваш импорт: '' 'import static android.support.test.espresso.action.ViewActions.click;' '' – Gustavo

+0

не подключается. Он сохраняет активность и ничего не делает: S – Jose

0

Используйте этот кусок кода:

public static ViewAction clickChildViewWithId(final int id) { 
    return new ViewAction() { 
     @Override 
     public Matcher<View> getConstraints() { 
      return null; 
     } 

     @Override 
     public String getDescription() { 
      return "Click on a child view with specified id."; 
     } 

     @Override 
     public void perform(UiController uiController, View view) { 
      View v = view.findViewById(id); 
      v.performClick(); 
     } 
    }; 
} 

и использовать его, как это :

onView(allOf(withId(R.id.ID_OF_RECYCLERVIEW), isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(POSITION_IN_RECYCLERVIEW, clickChildViewWithId(R.id.ID_OF_TEXTVIEW))); 
Смежные вопросы