2017-02-18 12 views
1

私はです。CardViewRecyclerView子です。 のすべての項目RecyclerViewは翻訳された単語です。 RecyclerViewにある特定のアイテムの削除をテストしたいです。私が異なる条件でテストするので、私はアイテムの位置に独立していることが重要です(ゼロ、または異なるソートの可能性のあるアイテムがたくさんあります...ポジションが私にとって意味をなさない)。したがって、私はのマッチャーを書いて、のビューホールダーのデータに基づくビューを見つけました。RecyclerViewアイテムが位置、データを知らずに存在するかどうかを確認する方法Espresso

public static Matcher<RecyclerView.ViewHolder> withWordAndTranslation(String word, String translation) { 
checkNotNull(word); 
checkNotNull(translation); 
return new BoundedMatcher<RecyclerView.ViewHolder, WordsViewHolder>(WordsViewHolder.class) { 
    @Override 
    protected boolean matchesSafely(WordsViewHolder holder) { 
    return holder.wordTxt.getText().toString().equalsIgnoreCase(word) 
     && holder.translationTxt.getText().toString().equalsIgnoreCase(translation); 
    } 

    @Override 
    public void describeTo(Description description) { 
    description.appendText("view holder with word, translation: " + word + ", " + translation); 
    } 
}; 
} 

これまでのところ、とても良いです。 RecyclerViewに追加され、私は適切なビューを取得し、それに対してアクションをクリックしてください使用してTextViewsで「test_word」と「test_translation」との項目を仮定:

onView(allOf(withId(R.id.wordsRecyclerView), withParent(withId(R.id.cardView)), isDisplayed())) 
    .perform(actionOnHolderItem(withWordAndTranslation("test_word", "test_translation"), click())); 

FYIそれは、この項目の選択を提供します。私は仕事が選択した項目を削除することで、ボタン[削除]をクリックします:。

onView(allOf(withId(R.id.action_delete), isDisplayed())).perform(click()); 

と私は本当に項目(「test_word、test_translationは)まだRecyclerView上に存在するかどうかを確認したいがしかし、私は知らないどのように任意のアイデア/ソリューション

。?

答えて

0

エスプレッソのドキュメントは、あなたがget the Adapter and iterate over it. は、サンプルコードを取り、RecyclerViewでAdapterViewを置き換える。

+0

うん、でもRecyclerViewがAdapterViewではありません。それはのViewGroupであることをお勧めします。 – Przemo

+1

そうだね、私の答えは、私は物事を混ぜあなたはRecyclerViewアダプタを取得する必要があり、AdapterViewは必要ありません(whi chはRecyclerViewsとは関係ありません)。アダプター(またはRecyclerView#アダプタークラスの子実装)は、RecyclerViewのすべての項目を認識する唯一のインスタンスです。そのため、アダプタからデータのリストを取得し、アイテムがこのリストにないことを確認する必要があります。 – sebokopter

関連する問題