2016-09-03 74 views
6

有沒有辦法使用Espresso滾動到recyclerview的結尾?Espresso:Recyclerview滾動到結尾

有一個文本項目讓我們說'文本XYZ'和recyclerview有一個id recycler_view。此項目恰好是回收商視圖的最後一項。

我試圖

onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click()); 

但這似乎並沒有工作。有任何想法嗎?

+0

似乎不起作用 - 錯誤日誌請 – piotrek1543

+0

您正在檢查在滾動到之前顯示的視圖。 – denys

+0

@denys ckeck用於實際的回收站視圖。它不應該有任何區別,除非實際上沒有顯示recyclerview。 –

回答

13

RecyclerViewActions.scrollTo()ViewHolderItemView匹配,其在適配器的onCreateViewHolder()中膨脹。爲了使scrollTo()正常工作,您需要提供一個唯一標識ItemView的匹配器。

您當前的匹配器會告訴espresso滾動到使用TextView作爲itemView充氣的ViewHolder。可能會發生這種情況,但通常您需要執行一些ViewGroup操作,以按照您希望的方式對視圖持有人進行調整。

如果將scrollTo()匹配器更改爲hasDescendant(withText("Text XYZ"))以說明所有嵌套佈局(如果存在多個佈局)。

也請記住,因爲你也試圖點擊項目 - 你不能做到這一點在同一個perform()因爲它會發送點擊當前ViewInteraction,這是在這種情況下RecyclerView ID爲R.id.recycler_view。在同一個表演中這樣做只需單擊RecyclerView上的中間,而不是滾動到的項目。

要解決此問題,您需要使用另一個onView()與您用於滾動到某個項目的匹配器或使用RecyclerView.actionOnItem()

在另一個onView()聲明的情況下,hasDescendant(withText("Text XYZ"))會失敗你,因爲它會發現,TextView的(viewholder,recyclerview,將保存該recyclerview等等的ViewGroup),因爲它們都具有這種特殊的後裔所有的父母。這將迫使你使得匹配器更精確,並考慮所有嵌套佈局。在這種情況下,我通常會選擇匹配器withChild(),但對您而言可能會有所不同。

+0

真棒,謝謝,完美的作品! (withId(R.id.rvSettings))。check(matches(isDisplayed()))。(RecyclerViewActions.scrollTo(hasDescendant(withText(stringId)))); –