Cara untuk mengelakkan ralat "StaleElementReferenceException" dalam Selenium
P粉920835423
2023-08-21 17:47:18
<p>Saya sedang melaksanakan banyak ujian Selenium di Jawa - kadangkala, ujian saya gagal kerana <kod>StaleElementReferenceException</code>. </p>
<p>Bolehkah anda mencadangkan beberapa cara untuk menjadikan ujian lebih stabil? </p>
Saya pernah mengalami masalah ini, tetapi tanpa saya sedar, BackboneJS sedang berjalan pada halaman dan ia menggantikan elemen yang saya cuba klik. Kod saya adalah seperti berikut.
Ini sudah tentu fungsinya sama seperti kod di bawah.
Sesekali ia berlaku bahawa javascript menggantikan elemen checkoutLink antara carian dan klik, iaitu.
Ini menghasilkan StaleElementReferenceException apabila cuba mengklik pada pautan. Saya tidak dapat mencari cara yang boleh dipercayai untuk memberitahu WebDriver supaya menunggu javascript selesai dijalankan, jadi inilah cara saya akhirnya menyelesaikannya.
Kod ini akan terus mencuba untuk mengklik pautan, mengabaikan pengecualian StaleElementReferenceException, sehingga klik berjaya atau tamat masa dicapai. Saya suka penyelesaian ini kerana ia menghilangkan kerumitan menulis logik cuba semula dan hanya menggunakan binaan terbina dalam WebDriver.
Ini berlaku jika manipulasi DOM berlaku pada halaman menyebabkan elemen tidak boleh diakses buat sementara waktu. Untuk menangani situasi ini, anda boleh cuba mengakses elemen beberapa kali dalam satu gelung sehingga akhirnya pengecualian dilemparkan.
Cuba gunakan penyelesaian hebat ini daripada darrelgrainger.blogspot.com: