代码之家  ›  专栏  ›  技术社区  ›  Nick Cardoso

在浓缩咖啡中,我如何测试RecyclerView的*任何*子级是否包含正确的文本

  •  1
  • Nick Cardoso  · 技术社区  · 6 年前

    我知道如何得到一个回收项目的立场和如何检查文字

    但我不知道怎么说: 如果有任何项目 hasDescendant(withText(A))

    1 回复  |  直到 6 年前
        1
  •  2
  •   Aaron    6 年前

    您可以尝试创建自定义 Matcher<View> :

    public static Matcher<View> hasItem(Matcher<View> matcher) {
        return new BoundedMatcher<View, RecyclerView>(RecyclerView.class) {
    
            @Override public void describeTo(Description description) {
                description.appendText("has item: ");
                matcher.describeTo(description);
            }
    
            @Override protected boolean matchesSafely(RecyclerView view) {
                RecyclerView.Adapter adapter = view.getAdapter();
                for (int position = 0; position < adapter.getItemCount(); position++) {
                    int type = adapter.getItemViewType(position);
                    RecyclerView.ViewHolder holder = adapter.createViewHolder(view, type);
                    adapter.onBindViewHolder(holder, position);
                    if (matcher.matches(holder.itemView)) {
                        return true;
                    }
                }
                return false;
            }
        };
    }
    

    onView(withId(...)).check(matches(hasItem(hasDescendant(withText(...)))))
    

    或者如果您不需要自定义匹配器,也可以使用 RecyclerViewActions.scrollTo() :

    onView(withId(...)).perform(scrollTo(hasDescendant(withText(...))))