ViewPager中的Espresso Recylerview匹配多个视图

Htm*_*sin 6 android android-fragments android-espresso android-recyclerview

如何使用实现具有匹配多个视图的ID的RecylerView的片段来定位Viewpager?

我有一个MainActivity,它有一个Viewpager.Viewpager有5个标签.在这5个选项卡中,我使用RecylerViews在每个选项卡中加载图像.

RecylerView XML在不同的片段中重复使用,因此当使用Espresso访问它时,它会让抱怨ID与多个视图匹配.

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
Run Code Online (Sandbox Code Playgroud)

我的RecylerView不加载任何文本,只加载图像,所以我甚至不能做withText("Text here").我也不能onData()用于RecylerViews.

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
            MainActivity.class);

    Activity activity = mActivityRule.getActivity();

    @Test
    public void ExampleMethod() {

        // perform a swipe
        onView(withId(R.id.viewpager)).perform(swipeLeft());  

       // try to click on one of the recycler view items.
       // this crashes:
       onView(withId(R.id.recycler_view))
           .perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));

    }
}
Run Code Online (Sandbox Code Playgroud)

所以它崩溃并指出错误

android.support.test.espresso.AmbiguousViewMatcherException:'with id:com.example.app:id/recycler_view'匹配层次结构中的多个视图.问题视图在下方标有"****MATCHES****".

//列出不同的层次结构

View Hierarchy:

View Hierarchy:
+>DecorView{id=-1, visibility=VISIBLE, width=720, height=1280, 
  has-focus=false, has-focusable=true, has-window-focus=true, 
  is-clickable=false, is-enabled=true, is-focused=false, 
  is-focusable=false, is-layout-requested=false, is-selected=false, 
  root-is-layout-requested=false, has-input-connection=false, x=0.0, 
  y=0.0, child-count=1}

//...
Run Code Online (Sandbox Code Playgroud)

Dem*_*oul 15

我在使用a时遇到了同样的问题ViewPager,并将isDisplayed()条款添加到ViewMatcher为我解决的问题中(尽管如同在Espresso中的所有内容一样,它有时会出现片状)...

onView(allof(isDisplayed(), withId(R.id.recycler_view)))
    .perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但这没有用。错误:recycler_view 并显示在屏幕上给用户)' 匹配层次结构中的多个视图。 (2认同)