I've already found that when I want to set value to text field, text area or password field, I can use id, name or label as something
in fill_in something, :with => some_value
. However such approach fails when I try to set value to <input type="hidden">
field (and I want to do it because those are normally filled client-side scripts which I test separately). How could I set such a hidden field with Capybara? Is it possible?
HTML:
<input id='offer_latitude' name='offer[latitude]' type='hidden'> <input id='offer_longitude' name='offer[longitude]' type='hidden'>
spec:
describe "posting new offer" do it "should add new offer" do visit '/offer/new' fill_in 'offer[latitude]', :with => '11.11' fill_in 'offer[longitude]', :with => '12.12' click_on 'add' end end
gives:
1) posting new offer should add new offer Failure/Error: fill_in 'offer[latitude]', :with => '11.11' Capybara::ElementNotFound: cannot fill in, no text field, text area or password field with id, name, or label 'offer[latitude]' found
A hidden field lets web developers include data that cannot be seen or modified by users when a form is submitted. A hidden field often stores what database record that needs to be updated when the form is submitted.
You need to locate the hidden field and set its value. There are a couple ways, this is probably the simplest
find(:xpath, "//input[@id='my_hidden_field_id']").set "my value"
If you're executing a client_side script in production, you could just tell capybara to run it with a javascript-compliant driver
page.execute_script("$('hidden_field_id').my_function()")
There are many ways to achieve the same result. The one I like the most is:
first('input#id.class', visible: false).set("your value")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With