Pertanyaan Capybara: Tidak dapat menemukan css


Saya menggunakan capybara untuk mengklik kotak centang, namun sepertinya tidak menemukannya apa pun yang saya lakukan. Saya dapat menemukan dengan benar rentang dan label di dalam rentang, tetapi bukan input yang sebenarnya saya butuhkan.

Ini kotak centangnya

<span class="checkbox tos">
  <input id="agreement" name="agreement" onclick="agreeValidate();" type="checkbox" value="false">
  <label for="agreement">I accept the <a href="http://www.dev.com:3000/terms" target="_blank">Terms of Use</a>, <a href="http://www.dev.com:3000/privacy" target="_blank">Privacy Policy</a>, and am at least 13 years old</label>
</span>

Dan inilah beberapa hal yang telah saya coba

page.check('agreement')
find(:css, '#agreement').set(true)
find('#agreement').set(true)
find('#agreement').click

Namun, mereka semua memberi saya kesalahan yang sama

Unable to find css "#agreement" (Capybara::ElementNotFound)

Saya juga bertanya-tanya apakah metode ini akan memadamkan onclick metode, ketika kotak centang diklik? saya merasa seperti find(:css, '#agreement').set(true) tidak akan memicu onclick peristiwa. Namun, saya tidak yakin tentang sisanya.

Memperbarui

Saya juga mencoba memilih elemen melalui xpath. Berikut ini berbagai hal yang saya temukan

find(:xpath, '//*[@id="registration"]/span[2]')

Ini dapat menemukan span elemen tidak masalah

find(:xpath, '//*[@id="registration"]/span[2]/input')

Ini tidak dapat menemukan elemen yang saya butuhkan, tetapi xpath ini benar memilih elemen di konsol chrome

find(:xpath, '//*[@id="agreement"]')

Ini tidak dapat menemukan elemen yang saya butuhkan, tetapi xpath memilih elemen di konsol chrome

find(:xpath, '//*[@id="registration"]/span[2]/label')

Ini dapat menemukan label elemen dalam span tanpa masalah.


32
2018-01-09 23:43


asal


Jawaban:


Saya memiliki masalah yang tepat kemarin. Capybara secara otomatis mengabaikan input karena tidak terlihat. Saya memecahkannya dengan yang berikut:

find('#agreement', :visible => false).click

Anda juga dapat menambahkan yang berikut ke env.rb untuk memungkinkan Capybara berinteraksi dengan semua elemen tersembunyi:

Capybara.ignore_hidden_elements = false

32
2018-02-05 11:53



Coba tambahkan :visible opsi disetel ke false.

find('#agreement', visible: false).click

Secara default, Capybara hanya menemukan elemen yang terlihat. Tampaknya driver yang mendasari mengidentifikasi masukan ini sebagai tidak terlihat sehingga belum ditemukan oleh Capybara.

:visible Pilihan ini juga didukung oleh sebagian besar metode Capybara lainnya (seperti check, has_css?, have_selector, dll.)


9
2018-01-19 08:33



Coba ini page.execute_script("$('#agreement').attr('checked', true)"). Untuk membuat karya ini Anda harus menandai contoh Anda dengan js: true


3
2018-01-19 13:11



Saya memiliki masalah yang sama ... Saya mencoba yang berikut ini berfungsi dengan baik ...

find('#tos', visible: false).set(true)

1
2018-01-23 17:22



Masalahnya adalah halaman tidak dirender karena Anda dibawa ke halaman lain. Untuk mengatasi ini, Anda tidak perlu mengubah Anda kode Capybara. Anda mungkin harus membuat beberapa perubahan dalam kode pengontrol Anda.

Saya mendapatkan ide ini karena Anda mengungkapkan salah satu komentar bahwa Anda dibawa ke server internal domain Anda saat melakukannya save_and_open_page sebagai gantinya. Tolong berikan saya rincian tentang apa yang Anda lihat di server internal. Apakah ada pesan kesalahan yang Anda lihat di sana? Juga, berikan saya kode Anda untuk tindakan pengontrol dari tampilan itu Anda ingin memeriksa kotak centang dan kode lain yang Anda tetapkan yang disebut dalam tindakan pengontrol itu.


0
2018-01-19 13:24



Sulit untuk mengatakan tanpa melihat seluruh halaman HTML. Berikut beberapa kemungkinan masalah:

  1. Anda mungkin mencari kotak centang sebelum halaman dimuat penuh? Pastikan Anda memiliki waktu tunggu yang cukup sebelum menelepon find(#agreement)
  2. Anda mungkin memiliki beberapa tag dengan id = "perjanjian" yang sama. Pastikan Anda hanya memilikinya.
  3. Pastikan halaman adalah HTML yang valid.
  4. Pastikan kotak centang terlihat, dan diaktifkan, dan setujuValidate () berfungsi dengan benar.

-1
2018-01-22 18:21