Cara menggunakan fill_in dengan find di Capybara (jika memungkinkan)


90

Saya ingin melakukan hal berikut tetapi tidak bisa karena sifat fill_in mengharapkan locator sebagai argumen pertama.

find(:css, "input[id$='donation_pledge_hundreds']").fill_in :with => "10"

Saya juga sudah mencoba melakukannya

element = find(:css, "input[id$='donation_pledge_hundreds']")   
fill_in element.<method> , :with => "10"

tetapi tidak ada metode yang mengembalikan data apa pun untuk mengidentifikasi elemen ke fill_in.

Adakah ide tentang cara terbaik menemukan bidang melalui regex untuk digunakan dengan fill_in?

Jawaban:


160

Beralih dari memori jadi mungkin tidak 100% benar, tetapi saya pikir jika Anda memiliki referensi ke elemen itu sendiri, Anda akan menggunakan setalih-alih fill_in:

find(:css, "input[id$='donation_pledge_hundreds']").set("10")

Namun untuk contoh spesifik Anda, fill_inharus dapat menemukan elemen seperti yang Anda tahu ID itu:

fill_in 'donation_pledge_hundreds', with: "10"

Orang baik, Itu dia. Bidang tertentu itu digunakan dalam konteks yang berbeda (diautentikasi / tidak diautentikasi) dan karenanya menggunakan id bidang yang berbeda. donation_pledge_hundreds adalah bagian umum dari field id sehingga membandingkan akhir dari nama field $ =
semut

8
Hati-hati menggunakan 'set' daripada metode built-in lainnya, karena metode ini tidak memicu peristiwa setelah mengubah nilainya.
Dan Caddigan

@DanCaddigan dan itulah mengapa tampaknya f3ck3d naik: / bagaimana Anda melakukannya?
Ben

Anda dapat menggunakan find(:css, "...").set("10").send_keys(:return)untuk menekan kembali setelahnya. Ini memicu peristiwa yang relevan. Saya belum mengujinya tetapi Anda juga bisa find(:css, "...").set("10").trigger(:blur)jika itu yang Anda inginkan.
gondalez

5

Alih-alih metode, Anda dapat menggunakan tanda kurung untuk mengembalikan :nameatau :id, misalnya element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" Pendekatan yang sama dapat digunakan dengan select- select my_type, from: find('select[name$="[type]"]')[:name]


3
find("input[id$='donation_pledge_hundreds']").set "10"

Perlu dicatat bahwa Anda dapat merantai temuan Anda.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"

2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"

Kode hanya jawaban tidak dianjurkan. Harap tambahkan beberapa penjelasan tentang bagaimana ini menyelesaikan masalah, atau bagaimana ini berbeda dari jawaban yang ada. Dari Ulasan
Nick

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.