61

我已经发现,当我想为文本字段、文本区域或密码字段设置值时,我可以使用 id、name 或 label,如something. fill_in something, :with => some_value但是,当我尝试为<input type="hidden">字段设置值时,这种方法会失败(我想这样做,因为这些通常是我单独测试的填充客户端脚本)。我怎么能用水豚设置这样一个隐藏的领域?可能吗?

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
4

4 回答 4

83

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

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

如果您在生产中执行 client_side 脚本,您可以告诉 capybara 使用兼容 javascript 的驱动程序运行它

page.execute_script("$('hidden_field_id').my_function()")
于 2012-05-29T19:05:39.080 回答
57

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

first('input#id.class', visible: false).set("your value")
于 2015-02-18T15:51:10.503 回答
4

如果您使用 poltergeist/phantomjs 作为驱动程序并且 jquery 不适合您,那么总是有很好的老式 js:

page.execute_script("document.getElementById('#some-id').value = 'some-value'");
于 2014-02-19T21:38:35.630 回答
2

这对我有用

find_field(id: 'your_hidden_field_id', type: :hidden).set('Field value here')

  
于 2020-09-23T10:43:01.457 回答