Saya melihat ini hanya di Chrome.
Pesan kesalahan lengkap berbunyi:
"org.openqa.selenium.WebDriverException: Elemen tidak dapat diklik pada titik (411, 675). Elemen lain akan menerima klik: ..."
Elemen yang 'akan menerima klik' adalah di samping elemen yang dimaksud, bukan di atasnya dan tidak tumpang tindih, tidak bergerak di sekitar halaman.
Saya telah mencoba menambahkan offset, tetapi itu tidak berhasil. Item ada di jendela yang ditampilkan tanpa perlu menggulir.
google-chrome
selenium
selenium-webdriver
automated-tests
pengguna1591169
sumber
sumber
Jawaban:
Ini disebabkan oleh 3 jenis berikut:
1. Elemen tidak terlihat untuk diklik.
Gunakan Tindakan atau JavascriptExecutor untuk membuatnya mengklik.
Berdasarkan Tindakan:
Oleh JavascriptExecutor:
atau
Kemudian klik pada elemen.
2. Halaman disegarkan sebelum mengklik elemen.
Untuk ini, buat halaman menunggu selama beberapa detik.
3. Elemen dapat diklik tetapi ada spinner / overlay di atasnya
Kode di bawah ini akan menunggu hingga hamparan menghilang
Kemudian klik pada elemen.
sumber
Anda juga dapat menggunakan klik JavaScript dan menggulir tidak akan diperlukan saat itu.
sumber
actions.MoveToElement
tidak berfungsi untuk saya dalam C # dan solusi pengguliran lainnya tampak agak rapuh karena ada kemungkinan pengguliran mungkin tidak benar melihat elemen atau posisi elemen pada halaman dapat berubah.Tampaknya ada bug di chromedriver untuk itu (masalahnya adalah itu ditandai tidak akan diperbaiki) -> GitHub Link
( Tempatkan hadiah pada FreedomSponsors mungkin?)
Ada solusi yang disarankan di komentar # 27. Mungkin itu akan bekerja untukmu-
sumber
Saya memiliki masalah yang sama, mencoba semua solusi yang ditawarkan tetapi mereka tidak bekerja untuk saya. akhirnya saya menggunakan ini:
Semoga ini membantu
sumber
Saya telah melihat ini dalam situasi ketika jendela Chrome yang didorong selenium dibuka terlalu kecil. Elemen yang akan diklik keluar dari viewport dan karenanya gagal.
Kedengarannya logis ... pengguna sungguhan harus mengubah ukuran jendela atau gulir sehingga memungkinkan untuk melihat elemen dan bahkan mengkliknya.
Setelah menginstruksikan driver selenium untuk mengatur ukuran jendela dengan tepat masalah ini hilang untuk saya. API webdriver diuraikan di sini .
sumber
Wow, banyak jawaban di sini, dan banyak yang bagus.
Saya harap saya akan menambahkan sesuatu dari pengalaman saya ini.
Baiklah teman-teman, dalam kasus saya ada overlay cookie menyembunyikan elemen sesekali. Menggulir ke elemen juga berfungsi; tetapi menurut pendapat saya yang sederhana (untuk kasus saya, bukan obat mujarab untuk semua orang) solusi paling sederhana adalah dengan masuk ke layar penuh (saya menjalankan skrip saya pada 3/4 dari jendela layar)! Jadi di sini kita mulai:
Semoga itu bisa membantu!
sumber
ruby / watir-webdriver / chrome
Saya menggunakan trik berikut dan sepertinya berhasil:
sumber
Saya juga bergulat dengan masalah ini. Kode berfungsi dengan baik di FF, gagal di Chrome. Apa yang saya coba lakukan adalah mengklik kotak centang - jika tidak ada dalam tampilan, saya akan gulir untuk melihat dan kemudian klik. Bahkan menggulir ke tampilan berfungsi di Chrome, hanya beberapa piksel bagian bawah kotak centang tidak terlihat sehingga webdriver menolak mengkliknya.
Solusi saya adalah ini:
Chrome juga memiliki masalah dengan sendKeys, menggunakan Tindakan terkadang diperlukan. Tentunya, Anda perlu tahu arah mana dan seberapa banyak Anda harus pergi sehingga jarak tempuh Anda dapat bervariasi. Tapi saya lebih suka ini daripada hack javascript, jadi saya mempostingnya di sini kalau-kalau ada orang lain yang merasa berguna.
sumber
Saya mendapatkan kesalahan ini saat menjalankan tes tanpa kepala dengan xvfb-run. Mereka bekerja dengan sempurna secara lokal. Menggunakan chrome, versi webdriver / chromedriver / chrome / java dll semuanya identik.
Bug 'tidak akan diperbaiki' di chromedriver - GitHub Link yang ditunjukkan oleh Tony Lâmpada menyarankan ini mungkin terkait dengan apa yang / tidak terlihat di layar.
Pesan bantuan untuk xvfb-run menunjukkan berikut ini:
Mengubah resolusi untuk xvfb membuat kesalahan hilang:
sumber
Saat menggunakan busur derajat ini membantu saya:
sumber
Pertama, cobalah untuk mendapatkan driver Chrome terbaru dan periksa apakah itu menyelesaikan masalah.
Dalam kasus saya, itu tidak memperbaiki masalah. Tetapi, solusi berikut ini bekerja untuk saya sejauh ini. Berikut ini adalah kode C # tetapi Anda dapat mengikuti logika yang sama dalam bahasa spesifik Anda. Apa yang kami lakukan di sini adalah,
Langkah 1: Fokus pada elemen menggunakan objek Tindakan Selenium,
Langkah 2: Kemudian lakukan klik pada elemen
Langkah 3: Jika ada pengecualian, maka kami memicu acara "Klik" javascript pada elemen dengan menjalankan skrip javascript melalui metode "ExecuteScript" driver browser Selenium.
Anda juga dapat melewati langkah 1 dan 2 dan hanya mencoba langkah 3 juga. Langkah 3 akan bekerja sendiri tetapi saya perhatikan beberapa perilaku aneh dalam satu skenario di mana langkah 3, meskipun berhasil mengklik elemen, menyebabkan perilaku tak terduga di bagian lain dari kode saya setelah mengklik elemen.
sumber
Saya membuat metode ini berdasarkan komentar dari jawaban Tony Lâmpada. Ini bekerja dengan sangat baik.
sumber
Saya mendapatkan masalah yang sama saat menjalankan skrip selenium dengan python. Inilah yang saya gunakan untuk mengklik elemen:
sumber
Saya menghadapi masalah yang sama ketika saya harus memeriksa dua kotak centang satu demi satu. Tapi saya mendapatkan error.hence yang sama di atas saya menambahkan menunggu di antara langkah-langkah saya untuk memeriksa kotak centang .... itu bekerja dengan baik dan hebat. berikut adalah langkah-langkahnya: -
sumber
Anda perlu menggunakan fokus atau gulir pada elemen itu. Anda juga mungkin harus menggunakan tunggu tunggu.
ATAU
Elemen tidak dapat diklik karena Spinner / Overlay di atasnya:
ATAU
ATAU
Jika masih tidak berfungsi gunakan
JavascriptExecutor
sumber
Tampaknya ini adalah hasil dari bug "Won't Fix" di biner driver Chrome.
Salah satu solusi yang bekerja untuk saya (Mileage May Vary May) dapat ditemukan dalam diskusi Grup Google ini, Komentar # 3:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc
Bagian yang relevan ada di sini:
Dalam kasus saya, saya menggunakan Python, jadi setelah saya mendapatkan elemen yang diinginkan, saya hanya menggunakan
Saya berharap ini hanya berfungsi, jika elemen yang Anda coba klik adalah tautan ...
sumber
Saya menghadapi masalah yang sama dengan clj-webdriver (clojure port of Selenium). Saya baru saja menerjemahkan solusi sebelumnya ke clojure untuk kenyamanan. Anda dapat memanggil fungsi ini sebelum melakukan klik atau apa pun untuk menghindari masalah itu.
sumber
Ini mungkin terjadi jika elemen berubah posisi saat driver mencoba mengkliknya (saya pernah melihat ini dengan IE). Pengemudi mempertahankan posisi awal tetapi pada saat ia benar-benar mengkliknya, posisi itu tidak lagi menunjuk ke elemen itu. Pengandar FireFox tidak memiliki masalah ini BTW, tampaknya itu "klik" elemen pemrograman.
Bagaimanapun, ini dapat terjadi ketika Anda menggunakan animasi atau hanya mengubah ketinggian elemen secara dinamis (misalnya
$("#foo").height(500)
). Anda perlu memastikan bahwa Anda hanya mengklik elemen setelah tingginya "menetap". Saya berakhir dengan kode yang terlihat seperti ini (C # binding):Jika terjadi animasi atau faktor lain yang tidak dapat Anda tanyakan dengan mudah, Anda dapat menggunakan metode "generik" yang menunggu elemen tersebut diam:
sumber
Saya bertemu ini karena dialog pemuatan mencakup pada elemen ini. Saya secara sederhana menyelesaikannya dengan menambahkan menunggu sebelum bekerja dengan elemen ini.
Semoga bantuan ini!
sumber
Penjelasan pesan kesalahan :
Pesan kesalahan hanya mengatakan, bahwa elemen yang ingin Anda klik ada, tetapi tidak terlihat. Itu bisa ditutupi oleh sesuatu atau sementara tidak terlihat.
Mungkin ada banyak alasan mengapa elemen tersebut tidak terlihat pada saat tes. Harap analisis kembali halaman Anda dan temukan solusi yang tepat untuk kasus Anda.
Solusi untuk kasus tertentu :
Dalam kasus saya, kesalahan ini terjadi, ketika tooltip elemen layar yang baru saja saya klik, muncul di atas elemen yang ingin saya klik berikutnya. Defocus adalah solusi yang saya butuhkan.
element.blur()
elemen pop tooltip, yang akan membuat tooltip hilang.sumber
Alasan untuk kesalahan ini adalah bahwa elemen yang Anda coba klik tidak ada di viewport (wilayah dilihat oleh pengguna) dari browser. Jadi cara untuk mengatasinya adalah dengan menggulir ke elemen yang diinginkan terlebih dahulu kemudian melakukan klik.
Javascript:
Jawa:
sumber
Jawaban Re Tony Lâmpada, komentar # 27 memang memecahkan masalah bagi saya, kecuali bahwa itu memberikan kode Java dan saya membutuhkan Python. Berikut adalah fungsi Python yang menggulir ke posisi elemen dan kemudian mengkliknya.
Ini memecahkan masalah bagi saya di Chrome 34.0. Itu tidak menyebabkan kerusakan di Firefox 28.0 dan IE 11; browser tersebut tidak mengalami masalah, tetapi menggulir ke posisi elemen sebelum mengkliknya masih bukan hal yang buruk.
sumber
Mungkin itu bukan solusi yang benar-benar bersih tetapi berfungsi:
sumber
Saya mendapatkan bug ini karena saya menguji hover dan kemudian perlu mengklik tautan di bawah tooltip. Solusinya adalah menambahkan
page.find('.sp-logo').hover
sebelumclick_link
untuk mendapatkan tooltip keluar dari jalan.sumber
Itu lucu, sepanjang waktu saya habiskan melihat berbagai tanggapan, tidak ada yang mencoba yang jelas, yang tentu saja, saya juga tidak. Jika halaman Anda memiliki id yang sama digunakan beberapa kali, seperti yang saya lakukan, ("newButton",) dan yang Anda inginkan bukan yang pertama ditemukan, maka Anda kemungkinan besar akan mendapatkan kesalahan ini. Hal termudah untuk dilakukan (C #):
Perhatikan itu FindElements, bukan FindElement.
Dan kemudian uji untuk melihat berapa banyak hasil yang muncul dari pengambilan. Jika yang kedua, Anda dapat menggunakan:
Atau dapatkan id yang digunakan kembali untuk memperbaikinya.
sumber
.First(x => x.Visible)
ke panggilan FindElements) dan klik pada itu jika bukan nol.Setelah menguji semua saran yang disebutkan, tidak ada yang berhasil. Saya membuat kode ini. Itu bekerja, tetapi tidak indah
sumber
Saya melakukan semacam klik kasar dan itu berfungsi untuk saya.
sumber
Jika Anda telah
jQuery
memuat pada halaman, Anda dapat menjalankan perintah javascript berikut:Contoh menggunakan python executor:
sumber
Saya memiliki masalah yang sama dan itu disebabkan oleh konflik id antara div dan tautan di dalam div. Jadi pengemudi mengklik div bukan tautan yang saya inginkan. Saya mengubah id id dan itu berfungsi dengan baik.
Sebelum:
Setelah:
sumber
Di Drupal saat menggunakan Selenium :
sumber