How to fill hidden field with Capybara?

2019-01-22 05:33发布

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

3条回答
成全新的幸福
2楼-- · 2019-01-22 05:52

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")
查看更多
神经病院院长
3楼-- · 2019-01-22 06:05

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()")
查看更多
Explosion°爆炸
4楼-- · 2019-01-22 06:05

If you're using poltergeist/phantomjs as a driver and jquery isn't working for ya, there's always good old fashioned js:

page.execute_script("document.getElementById('#some-id').value = 'some-value'");
查看更多
登录 后发表回答