完全に機能するネストされた属性を処理するために、素晴らしいnested_form gemを使用しています。
ネストされたフォームの選択フィールドでいくつかの統合テストを実行するためのドライバーとして Poltergeist で Capybara/rspec を使用しようとすると、問題が発生します。
私のテストは次のとおりです。
click_on "Add Field"
find('input:last').set "Employee Code"
find('select:last').select "Word"
rspec で次のエラーが表示されます
Failure/Error: find('select:last').select "Word"
Capybara::Poltergeist::ObsoleteNode:
Capybara::Poltergeist::ObsoleteNode
「select:last」を検索する前に html コンテンツを印刷すると、正しい html が表示されます。以下に貼り付けます。
<input class="string required" id="source_model_attributes_attributes_1355377152026_field_name" label="Field Name" name="source[model_attributes_attributes][1355377152026][field_name]" placeholder="Field Name" size="50" type="text">
<select class="select required" id="source_model_attributes_attributes_1355377152026_field_type" label="Field Type" name="source[model_attributes_attributes][1355377152026][field_type]" prompt="Select Field Type">
<option value="">Select Field Type</option>
<option value="Word">Word</option>
<option value="Number">Number</option>
<option value="True or False">True or False</option>
<option value="Date & Time">Date & Time</option>
<option value="Date">Date</option>
<option value="Time">Time</option></select>
私のhtmlはIDと名前のフィールドにタイムスタンプが添付されて動的に生成されるため、fill_inの代わりにfindを使用しています。
このように使用しようとしたカピバラの選択アクションで運が悪かったことも言及する価値があるかもしれません.
select "Word", from: "Field Type"
以下のエラーで失敗します。
Failure/Error: select "Word", from: "Field Type"
Capybara::ElementNotFound:
cannot select option, no select box with id, name, or label 'Field Type' found
カピバラは、何らかの理由で、ラベルが実際のフォームから隠されているためか、ラベルを見つけることができません。