2016-01-27 39 views
0

我面临着奇怪的espresso仪器测试行为。点击回收商视图的项目不起作用。RecyclerView咖啡测试点击()不起作用

点击这里不发生了:

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

但这种变通办法

onView(withId(R.id.recyclerView)).perform(actionOnItemAtPosition(0, recyclerClick())); 

// ... 

public static ViewAction recyclerClick() { 
    return new ViewAction() { 

     @Override 
     public Matcher<View> getConstraints() { 
      return any(View.class); 
     } 

     @Override 
     public String getDescription() { 
      return "performing click() on recycler view item"; 
     } 

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

这是咖啡或RecyclerView问题?

+0

既不;意式浓缩咖啡根本不知道如何点击回收者视图。一旦你为它提供了一个howto实现,它就知道,并且它工作。 如果第二种方法不起作用,将会出现问题;) – Shark

+0

您是否尝试过使用onData而不是onView? – Christopher

+1

正如我们可以在[Espresso.onData()]的官方文档中看到的(http://developer.android.com/reference/android/support/test/espresso/Espresso.html#onData%28org.hamcrest.Matcher%3C ?%20extends%20java.lang.Object%3E%29) '使用此方法从AdapterView窗口小部件(例如ListView)加载(进入视图层次结构)项.' 'RecyclerView'扩展'ViewGroup'。所以'onData()'不能与它一起使用。 –

回答

1

应该是无关RecyclerView明确。 Espresso用其ViewActions.click()实施方案将MotionEvent发送到目标视图的中心。确保没有孩子拦截它。

+0

似乎你是对的。意式咖啡在屏幕上点击,但不能在视图中模拟'performClick()'。似乎在项目中间的某些视图拦截点击。 –

0

可以使用RecyclerViewActions

只需使用:

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

例如:

@RunWith(AndroidJUnit4.class) 
public class MainActivityTest { 
    @Rule 
    public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); 

    @Test 
    public void clickItem() { 
    onView(withId(R.id.recycler_view)) 
     .perform(RecyclerViewActions.actionOnItemAtPosition(o, click())); 

    onView(withId(R.id.text)) 
     .check(matches(withText("XX"))) 
     .check(matches(isDisplayed())); 
    } 
} 
+0

嗨。这实际上首先被剪掉了。这里的问题是'Espresso.click()'没有效果。而使用'view.performClick()'自定义'ViewAction'可以工作。 –

+0

刚试了ViewActions.click(),它的工作原理。 –

+0

您在哪个视图中定义了适配器中的onClickListener? –