如何填补与水豚隐藏的领域?

我已经发现,当我想要设置值的文本字段,文本区域或密码字段,我可以使用ID,名称或标签作为fill_in something, :with => some_value 。 但是,当我尝试将值设置为<input type="hidden">字段(并且我想这样做,因为这些字段通常是我单独testing的客户端脚本),则此方法失败。 我怎么能用水豚设置这样一个隐藏的领域? 可能吗?

HTML:

 <input id='offer_latitude' name='offer[latitude]' type='hidden'> <input id='offer_longitude' name='offer[longitude]' type='hidden'> 

规格:

 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 

得到:

 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 

您需要find隐藏的字段并设置其值。 有几个方法,这可能是最简单的

 find(:xpath, "//input[@id='my_hidden_field_id']").set "my value" 

如果你在生产中执行client_side脚本,你可以告诉水豚运行一个javascript兼容的驱动程序

 page.execute_script("$('hidden_field_id').my_function()") 

有很多方法可以达到相同的结果。 我最喜欢的是:

 first('input#id.class', visible: false).set("your value") 

如果你使用的是poltergeist / phantomjs作为驱动程序,而jquery不适用于ya,那么总是有很好的老式的js:

 page.execute_script("document.getElementById('#some-id').value = 'some-value'");