Bagaimana saya bisa menggunakan Espresso untuk mengklik tampilan tertentu di dalam item RecyclerView ? Saya tahu saya bisa mengklik item di posisi 0 menggunakan:
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
Tetapi saya perlu mengklik tampilan tertentu di dalam item itu dan bukan pada item itu sendiri.
Terima kasih sebelumnya.
- edit -
Untuk lebih tepatnya: Saya memiliki RecyclerView ( R.id.recycler_view
) yang itemnya adalah CardView ( R.id.card_view
). Di dalam setiap CardView saya memiliki empat tombol (antara lain) dan saya ingin mengklik tombol tertentu ( R.id.bt_deliver
).
Saya ingin menggunakan fitur-fitur baru Espresso 2.0, tetapi saya tidak yakin itu mungkin.
Jika tidak memungkinkan, saya ingin menggunakan sesuatu seperti ini (menggunakan kode Thomas Keller):
onRecyclerItemView(R.id.card_view, ???, withId(R.id.bt_deliver)).perform(click());
tapi saya tidak tahu apa yang harus diberi tanda tanya.
sumber
Jawaban:
Anda dapat melakukannya dengan menyesuaikan tindakan tampilan.
Kemudian Anda dapat mengkliknya dengan
sumber
Sekarang dengan android.support.test.espresso.contrib menjadi lebih mudah:
1) Tambahkan ketergantungan uji
* kecualikan 3 modul, karena kemungkinan besar Anda sudah memilikinya
2) Kemudian lakukan sesuatu seperti
Atau
Atau
sumber
exclude group: 'com.android.support' exclude module: 'recyclerview-v7'
actionOnItemAtPosition
membutuhkan tipe param. Tidak yakin apa yang harus diletakkan di sana.Inilah, bagaimana saya menyelesaikan masalah di kotlin:
lalu
sumber
Coba pendekatan selanjutnya:
sumber
Anda dapat klik pada item yang ke-3 dari
recyclerView
Seperti ini:Jangan lupa berikan
ViewHolder
tipe agar inferensi tidak gagal.sumber
<RecyclerView.ViewHolder>
terima kasih Pak;)Semua jawaban di atas tidak berfungsi untuk saya, jadi saya telah membangun metode baru yang mencari semua tampilan di dalam sel untuk mengembalikan tampilan dengan ID yang diminta. Ini membutuhkan dua metode (bisa digabungkan menjadi satu):
Kemudian terakhir Anda dapat menggunakan ini di Recycler View dengan melakukan hal berikut:
Anda dapat menggunakan callback untuk mengembalikan tampilan jika Anda ingin melakukan hal lain dengannya, atau cukup buat 3-4 versi berbeda untuk melakukan tugas lain.
sumber
Saya terus mencoba berbagai metode untuk menemukan mengapa jawaban @ blade tidak berhasil untuk saya, hanya untuk menyadari bahwa saya punya
OnTouchListener()
, saya memodifikasi ViewAction sesuai:sumber
Anda bahkan dapat menggeneralisasi pendekatan ini untuk mendukung lebih banyak tindakan, tidak hanya
click
. Inilah solusi saya untuk ini:Dan kemudian untuk
EditText
Anda dapat melakukan sesuatu seperti ini:sumber
Pertama, berikan tombol Anda contentDescriptions yang unik, yaitu "baris tombol pengiriman 5".
<button android:contentDescription=".." />
Kemudian gulir ke baris:
onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.scrollToPosition(5));
Kemudian pilih tampilan berdasarkan contentDescription.
onView(withContentDescription("delivery button row 5")).perform(click());
Deskripsi Konten adalah cara terbaik untuk menggunakan onView Espresso dan membuat aplikasi Anda lebih mudah diakses.
sumber
withText("Order")
akan bekerja juga, dan tidak mengharuskan Anda untuk mengetahui pada saat tes apa yang Anda pesan.