61

somethingテキストフィールド、テキストエリア、またはパスワードフィールドに値を設定する場合は、のようにid、name、またはlabelを使用できることをすでに知っています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スクリプトを実行している場合は、JavaScript準拠のドライバーで実行するようにcapybaraに指示するだけです。

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がyaで機能しない場合は、古き良き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 に答える