Невозможно удалить элемент из списка - PullRequest
0 голосов
/ 16 октября 2018

Я выбрал пункт и перетащил влево.но я не могу нажать на удаление изображения.

onView(withId(R.id.storewalk_list)) .perform(RecyclerViewActions.actionOnItemAtPosition(0, swipeLeft()));

enter image description here

enter image description here

вЭто изображения, справа от каждого продукта есть GAP, который имеет аналогичные свойства

Я пробовал следующий код:

onView(allOf(withId(R.id.delete_button), isDisplayed())).perform(actionOnItemAtPosition(0,click()));

Это дает мне ошибку:

android.support.test.espresso.AmbiguousViewMatcherException: '(with id: com.cit:id/delete_button and has parent matching: (with id: com.cit:id/swipeActions and has parent matching: with id: com.cit:id/swipe_layout) and is clickable)' matches multiple views in the hierarchy.

Может кто-нибудь, пожалуйста, дайте мне знать, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете создать пользовательский ViewAction, который принимает сопоставление выбранной позиции:

public static ViewAction actionOnView(Matcher<View> matcher, ViewAction action) {
    return new ViewAction() {
        @Override public Matcher<View> getConstraints() {
            return allOf(withParent(isAssignableFrom(RecyclerView.class)), isDisplayed());;
        }

        @Override public String getDescription() {
            return String.format("performing ViewAction: %s on item matching %s", action.getDescription(), matcher);
        }

        @Override public void perform(UiController uiController, View view) {
            List<View> matches = new ArrayList<>();
            for (View item : TreeIterables.breadthFirstViewTraversal(view)) {
                if (matcher.matches(item)) {
                    matches.add(item);
                }
            }
            switch (matches.size()) {
                default: throw new RuntimeException(String.format("Ambiguous views found %s", matcher));
                case 0: throw new RuntimeException(String.format("No view found %s", matcher));
                case 1: action.perform(uiController, matches.get(0));
            }
        }
    };
}

Если кнопка удаления уже видна, то вы можете сделать:

onView(withId(R.id.storewalk_list)).perform(actionOnItemAtPosition(0, actionOnView(withId(R.id.delete_button), click())))
0 голосов
/ 16 октября 2018

Я получил решение, создав собственный класс ..

https://mobikul.com/recycler-view-multiple-match-problem-in-espresso/

...