2016-06-09 23 views
3

我想知道如何在回收站視圖中找到物品順序每次運行隨機化的特定物品。意大利濃咖啡 - 如何在回收站視圖中查找特定物品(訂單是隨機的)

我們假設在回收站視圖中有4個項目,每個項目都由相同類型的視圖持有人以及其中的文本視圖表示。一個獨特的標題適用於每個視圖持有人/項目。在這個例子中,爲了簡單起見,標題是「A」,「B」,「C」和「D」。

如果順序是隨機的,我將如何找到位置(然後單擊)項目「A」?我知道如果順序沒有改變我可以scrollToPosition RecyclerViewInteraction行動,但在這種情況下,順序可以並將改變。

有什麼想法?

感謝, 扎克

+1

不隨機的物品,或者說,在可預見的方式,然後隨機選擇。你可以在你的隨機生成器中每次使用相同的種子,以確保這些物品是你尋找它們的地方。 – njzk2

+0

假設項目的順序不能由開發者控制。在一個理想的世界裏,是的,一個訂單(或者你建議的可預見的訂單)是理想的。對於這種情況是不可能的。 – Zach

回答

3

我能得到這個工作做了以下內容:

Matcher<RecyclerView.ViewHolder> matcher = CustomMatcher.withTitle("A"); 
onView((withId(R.id.recycler_view))).perform(scrollToHolder(matcher), actionOnHolderItem(matcher, click())); 

其中CustomMatcher.withTitle是:

public static Matcher<RecyclerView.ViewHolder> withTitle(final String title) 
{ 
    return new BoundedMatcher<RecyclerView.ViewHolder, CustomListAdapter.ItemViewHolder>(CustomListAdapter.ItemViewHolder.class) 
    { 
     @Override 
     protected boolean matchesSafely(CustomListAdapter.ItemViewHolder item) 
     { 
      return item.mTitleView.getText().toString().equalsIgnoreCase(title); 
     } 

     @Override 
     public void describeTo(Description description) 
     { 
      description.appendText("view holder with title: " + title); 
     } 
    }; 
} 
-2

使用Espresso.onData使用自定義視圖匹配。 Google example

我曾經用過的東西,可以適應這樣的你的情況:

onData(new BaseMatcher<String>() { 
     @Override 
     public void describeTo(Description description) { 
      // what? 
      description.appendText("Matches A"); 
     } 

     @Override 
     public boolean matches(Object item) { 
      return item instanceof String && ((String) item).equals("A"); 
     } 
    }).perform(click()); 

您可以通過任何你的模型類型是,如果它是比這更復雜取代String,並且還使用了內置在匹配器中,如果它很簡單(這種情況可以簡化onData(is("A")).perform(click()))。

+0

聽起來像一個很好的方法,但我得到一個錯誤,試圖使用這個:'android.support.test.espresso.NoMatchingViewException:層次結構中找不到匹配的視圖匹配:是可以從類:類android.widget.AdapterView'分配的 – Zach

+1

啊,我不認爲onData可以用於回收商的意見,這是正確的嗎? – Zach

+1

沒錯。我本來以爲它可以工作。有這個,但:https://stackoverflow.com/questions/27396583/how-to-click-on-an-item-inside-a-recyclerview-in-espresso – njzk2