Tidak ada yang terjadi saat menekan tombol pada mentimun, tes kapibara sebelum menambahkan tidur

Saya mempunyai masalah ketika saya memiliki halaman dengan semacam kupon yang seharusnya berubah karena beberapa penekanan tombol yang berbeda.

Namun, dalam satu kasus, sepertinya saya tidak dapat mengeklik tombol tertentu tanpa menambahkan jeda antara menemukan elemen dan menekan tombol.

kode tidak berfungsi:

element = page.find("[for='someButton']"])
element.click()

kode kerja:

element = page.find("[for='someButton']"])
sleep 2
element.click()

Saya bertanya-tanya apakah ada yang bisa saya lakukan untuk mengatasi masalah ini tanpa harus menambahkan waktu tidur, karena saya khawatir hal ini akan membuat tes saya lebih rapuh dan juga menyebabkan penundaan yang tidak perlu.

PS. Tidak ada kesalahan yang terjadi dan saya tidak menulis aplikasi web sendiri. Namun saya berbicara dengan orang yang menerapkan halaman ini dan dia mengatakan bahwa seharusnya tidak ada sesuatu yang istimewa tentang tombol yang satu ini dan pendengar acaranya harus ditambahkan segera setelah halaman dimuat


person Metareven    schedule 02.12.2013    source sumber
comment
Bagaimana cara gagalnya? Apakah Anda mendapatkan batas waktu atau mengklik hal yang salah?   -  person Louis    schedule 02.12.2013
comment
Sama sekali tidak ada yang terjadi (Saya tidak mendapatkan indikasi bahwa ada yang tidak beres di konsol) dan pengujian gagal lebih jauh ketika saya berharap kupon telah berubah setelah menekan tombol.   -  person Metareven    schedule 02.12.2013
comment
Masalah ini sekarang tampaknya telah meningkat dan setelah pembaruan aplikasi satu halaman kami, menemukan dan mengklik tombol langsung setelah memasuki lobi baru pada aplikasi kami tidak menyebabkan apa pun terjadi dan saya terpaksa menambahkan 1 detik tidur di semua tempat.   -  person Metareven    schedule 03.12.2013


Jawaban (1)


Hal ini dapat terjadi jika tombol dirender di DOM sebelum pengendali peristiwa klik terikat. Capybara akan dapat menemukan elemen tersebut segera setelah berada di DOM.

Jika ini kasusnya, pengujian sebenarnya menunjukkan kepada Anda bahwa ada bug (kecil). Pengguna akhir sebenarnya yang mengklik tombol saat halaman masih dimuat akan melihat hasil yang sama. Opsi yang lebih bersih adalah merender tombol melalui JavaScript dan mengikat pengendali klik pada saat yang bersamaan.

Jika mengubah halaman bukan pilihan Anda, mungkin masih ada harapan. Jika ada hal lain pada laman yang dirender oleh JavaScript dalam iterasi yang sama dari perulangan peristiwa, Anda dapat menambahkan sesuatu ke pengujian yang mencarinya sebelum mencoba mengeklik tombol. Misalnya, dalam aplikasi yang saya kerjakan di pekerjaan harian saya, kami merender GIF pemintal animasi di halaman saat halaman dimuat, lalu menyembunyikannya di JavaScript saat halaman dimuat penuh. Pengujian Capybara kami menunggu GIF pemintal disembunyikan sebelum berinteraksi dengan halaman.

person Tim Moore    schedule 03.12.2013
comment
Terima kasih, saya telah melakukan beberapa pengujian lagi dan saya dapat melihat bahwa banyak pengujian saya selesai sebelum halaman tersebut benar-benar ditampilkan dengan benar. Hal ini memungkinkan pengujian kami mencoba mengklik tombol sebelum halaman dimuat dengan benar. Kami tidak benar-benar memiliki gif yang berputar ketika membuka apa pun kecuali halaman depan aplikasi web kami, tetapi kami memiliki animasi transisi yang dapat saya tunggu hingga selesai. - person Metareven; 03.12.2013
comment
Variasi lain dari cara ini adalah dengan mengklik tombol, lalu melakukan pernyataan if/else untuk memeriksa hasilnya. Jika hasilnya tidak terjadi maka coba lagi. Saya mengalami masalah serupa ketika tombol yang saya coba klik tidak dimuat tepat waktu. - person Dono; 23.07.2014