Saya menggunakan Selenium 2 Java API dengan FirefoxDriver. Saat saya mengisi formulir, kotak centang ditambahkan ke halaman tergantung pada masukan formulir.
Saya ingin mensimulasikan klik pada kotak centang tersebut menggunakan Selenium. Elemen terlihat dan dapat digunakan di browser biasa tetapi, selenium menegaskan bahwa elemen tidak terlihat.
"Element is not currently visible and so may not be interacted with"
Bisakah saya memaksa selenium untuk mengabaikan keadaan elemen yang tidak terlihat? Bagaimana cara memaksa Selenium untuk berinteraksi dengan elemen yang tidak terlihat?
java
selenium-webdriver
djondal
sumber
sumber
Jawaban:
Selenium menentukan sebuah elemen terlihat atau tidak dengan kriteria berikut (gunakan pemeriksa DOM untuk menentukan css apa yang diterapkan ke elemen Anda, pastikan Anda melihat gaya yang dihitung):
Elemen Anda cocok dengan salah satu kriteria tersebut. Jika Anda tidak memiliki kemampuan untuk mengubah gaya elemen, berikut adalah bagaimana Anda dapat melakukannya secara paksa dengan javascript (akan menganggap WebDriver karena Anda mengatakan Selenium2 API):
Tapi itu tidak akan mengaktifkan peristiwa javascript, jika Anda bergantung pada peristiwa perubahan untuk masukan itu Anda harus mengaktifkannya juga (banyak cara untuk melakukannya, termudah untuk menggunakan pustaka javascript apa pun yang dimuat di halaman itu).
Sumber untuk pemeriksaan visibilitas -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
Spesifikasi WebDriver yang mendefinisikan ini -
https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#widl-WebElement-isDisplayed-boolean
sumber
Terkadang ini berarti ada beberapa elemen di halaman yang memiliki properti sama yang Anda coba telusuri dan Anda "berbicara dengan orang yang salah".
Jika elemen Anda tidak dapat diidentifikasi secara unik oleh: id atau: name (atau: class), ini bisa jadi rumit.
Kadang-kadang mencari elemen dengan: xpath akan membantu dan dalam beberapa kasus bahkan itu tidak praktis.
Dalam kasus tersebut, Anda mungkin harus mendapatkan semua elemen yang sesuai dengan kriteria Anda dan mereferensikan yang benar dengan indeks. Ini kotor, tapi berhasil.
Saya menggunakan Selenium / Watir dari aplikasi Ruby on Rails, jadi dalam kasus saya contohnya adalah:
Semoga ini membantu.
sumber
Saya memiliki masalah serupa, tetapi itu terkait dengan elemen yang tidak terlihat di viewport. Saya mengambil tangkapan layar dan menyadari jendela browser terlalu sempit dan elemen tidak dapat dilihat. Saya melakukan salah satunya dan berhasil:
Lihat: WebDriver.maximize_window ()
sumber
Atau Anda dapat menggunakan Selenium Action Class untuk mensimulasikan interaksi pengguna - Misalnya
sumber
Ada juga kasus lain ketika elemen yang terlihat akan dikenali sebagai tidak terlihat:
Untuk memeriksa apakah elemen yang Anda tidak ingin berinteraksi dengan CSS diubah, di CHROME lakukan ini:
sumber
Tidak terlihatnya juga bisa karena waktu ketika elemen seharusnya muncul perlahan. Memaksa browser untuk menunggu sebentar mungkin membantu dalam kasus itu.
Lihat, misalnya, pertanyaan tentang membiarkan WebDriver menunggu hingga elemen ada .
sumber
Saya memiliki masalah yang sama dengan selenium 2 di internet explorer 9, tetapi perbaikan saya sangat aneh. Saya tidak dapat mengklik input di dalam formulir saya -> pengulangan selenium, mereka tidak terlihat.
Itu terjadi ketika formulir saya memiliki bayangan melengkung -> http://www.paulund.co.uk/creating-different-css3-box-shadows-effects : dalam "Efek no. 2" yang konkret
Saya tidak tahu, mengapa & bagaimana solusi elemen semu ini menghentikan tes selenium, tetapi berhasil untuk saya.
sumber
Anda tidak dapat memaksa mengakses / mengubah elemen yang biasanya tidak dapat diakses oleh pengguna, karena Selenium dirancang untuk meniru interaksi pengguna.
Jika kesalahan ini terjadi, periksa apakah:
maximize()
di node.js ,maximize_window()
dengan Python),executeScript()
di node.js ,execute_script()
dengan Python).sumber
Saya baru saja menyelesaikan kesalahan ini saat menggunakan kapibara di proyek ror dengan menambahkan:
kepada
features/support/env.rb
.sumber
Saya baru saja menyelesaikan kesalahan ini dengan menunggu properti tampilan elemen
sumber
Saya masuk ke pengecualian ElementNotVisibleException menggunakan selenium untuk tes fungsional di situs django dengan glyphicons bootstrap sebagai tautan di templat sebagai:
Selama pengujian fungsional saya, gaya bootstrap tidak dimuat, kemudian mencoba mengklik tautan seperti itu akan memunculkan ElementNotVisibleException. Saya berhasil membuatnya dapat diklik hanya dengan menambahkan spasi di tag, seperti itu:
sumber
Ada banyak jawaban bagus di halaman ini.
Keduanya dibahas dalam berbagai detail di atas. Jawaban yang tidak saya lihat adalah ScrollToElement. Sepertinya Anda sedang memproses daftar elemen, sementara memproses Anda membuat lebih banyak elemen, kotak centang. Ini dapat menyebabkan elemen dalam daftar Anda keluar dari halaman yang terlihat. Terkadang Anda dapat melihat elemen dengan mata telanjang tetapi Anda tidak bisa mengkliknya. Saat memproses daftar, Anda terkadang harus menyela pengguliran.
Karena saya menjalankan ini, saya membuat PageScroll.java dan meletakkan skrip gulir saya di sana. Berikut adalah beberapa metode dari kelas ini:
lihat Scroll Element ke View dengan Selenium untuk contoh lainnya
sumber
Jawaban yang diterima berhasil untuk saya. Di bawah ini adalah beberapa kode untuk menemukan elemen induk yang membuat Selenium berpikir bahwa itu tidak terlihat.
sumber
Untuk menambahkan butiran pasir saya di sini: jika sebuah elemen berada di belakang div tetap, itu akan dianggap tidak terlihat dan Anda tidak akan dapat mengkliknya; ini terjadi pada saya baru-baru ini dan saya menyelesaikannya dengan menjalankan skrip seperti yang disarankan di atas, yang tidak:
sumber