私はです。CardViewとRecyclerView子です。 のすべての項目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上に存在するかどうかを確認したいがしかし、私は知らないどのように任意のアイデア/ソリューション
。?
うん、でもRecyclerViewがAdapterViewではありません。それはのViewGroupであることをお勧めします。 – Przemo
そうだね、私の答えは、私は物事を混ぜあなたはRecyclerViewアダプタを取得する必要があり、AdapterViewは必要ありません(whi chはRecyclerViewsとは関係ありません)。アダプター(またはRecyclerView#アダプタークラスの子実装)は、RecyclerViewのすべての項目を認識する唯一のインスタンスです。そのため、アダプタからデータのリストを取得し、アイテムがこのリストにないことを確認する必要があります。 – sebokopter