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?

semut
sumber

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"
Jon M
sumber
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]

bhfailor
sumber
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"
Nate
sumber
2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"
aki
sumber
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
0
fill_in <$id>, :with => 'text you want to fill in'
Chints Vadgama
sumber