2016-01-27 38 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? –