Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Espresso:滑动标签,每个标签上都有RecyclerViews_Android_Android Espresso - Fatal编程技术网

Android Espresso:滑动标签,每个标签上都有RecyclerViews

Android Espresso:滑动标签,每个标签上都有RecyclerViews,android,android-espresso,Android,Android Espresso,我有一个滑动标签应用程序,每个标签上都有recyclerview。 我正在测试应用程序使用。我想点击一个recyclerview项目。当我这样做时: onView(withId(R.id.recyclerView)) .perform(RecyclerViewActions.actionOnItemAtPosition(2, click())); 我得到一个例外: android.support.test.espresso.AmbiguousViewMatcherEx

我有一个滑动标签应用程序,每个标签上都有recyclerview。 我正在测试应用程序使用。我想点击一个recyclerview项目。当我这样做时:

 onView(withId(R.id.recyclerView))
            .perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));
我得到一个例外:

android.support.test.espresso.AmbiguousViewMatcherException: 'with id: com.uriel.frankel:id/recyclerView' matches multiple views in the hierarchy.

有什么想法吗?

嗯,我猜您在选项卡中的每个
RecyclerView
都使用相同的xml文件。因此,您所有的
RecyclerView
都具有相同的ID。因此,您不能使用您的ID引用您的
RecyclerView


因此,要么给每个
RecyclerView
它自己的ID,要么尝试用任何其他
ViewMatcher
withText(“你的回收器中的任何特定文本”)一样搜索
。您可能会找到适合您情况的方法。

我建议创建
ViewHolder
匹配器,以匹配
回收视图中的特定项目。然后,您将能够使用
positionablerecyclervicewaction
scrollToHolder(…)
例如:

public static Matcher<RecyclerView.ViewHolder> withMessageSubjectInViewHolder(String itemSubject) {
        Checks.checkNotNull(itemSubject);
        return new BoundedMatcher<RecyclerView.ViewHolder,
                MyRecyclerViewItemAdapter.MyViewHolder>(MyRecyclerViewItemAdapter.MyViewHolder.class) {
            @Override
            public boolean matchesSafely(MyRecyclerViewItemAdapter.MyViewHolder holder) {
                boolean isMatches = false;

                if (!(holder.subject == null)) {
                    isMatches = ((itemSubject.equals(holder.subject.getText().toString()))
                            && (holder.subject.getVisibility() == View.VISIBLE));
                }
                return isMatches;
            }

            @Override
            public void describeTo(Description description) {
                description.appendText("with message subject: " + itemSubject);
            }
        };
    }

你为什么不把监听器添加到你的项目中呢?你有一个
RecyclerView
和一个
Adapter
,里面有一个
ViewHoler
类,对吧?我说的是Android Espresso的UI单元测试。哦,很抱歉,我错过了那一个我的错误。我编辑了这个问题的答案。
onView(withId(R.id.my_recycler_view_id)).perform(scrollToHolder(withMessageSubjectInViewHolder(unique_message_subject)));
onView(withText(unique_message_subject)).check(matches(isDisplayed())).perform(click());