RoR で送信するフォームのラジオボタンをチェックしようとしていますが、これは開発と運用では機能しますが、@javascript タグを使用して Cucumber で自動テストを実行すると機能しません。ビューは次のとおりです。
<%= form_for @model do |f| %>
<%= f.error_messages %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :contact_id, :value => @contact.id %>
<ul id="categories" class="unstyled">
<% @new_categories.each do |priority| %>
<li class="span2 contact" id="category_<%=priority.category.id%>" style="margin:0 20px 20px 0;position:relative; background:white">
<div class="contact-image">
<%= image_tag(priority.category.image, :alt => priority.category.name) %>
<%= f.radio_button(:category_id, priority.category.id, class: 'hidden') %>
</div>
</li>
<% end %>
</ul>
<p>
<%= f.submit 'submit', :id=>"submit_category", :class=>'hide' %></p>
<% end %>
<script type="text/javascript">
$('li').click(function() {
var radio = $(this).find("input[type=radio]");
radio.attr('checked', true);
$('#submit_category').click();
});
</script>
このようなスクリプトをループ内に配置すると、次のようになります。
<script type="text/javascript">
$('li').click(function() {
$("#model_category_id_<%=priority.category.id%>").attr('checked', true);
$('#submit_category').click();
});
</script>
それは機能しますが、効率が悪いと思います。前者のソリューションでは、var radio はオブジェクトを返します (これは alert() で見つかりました) が、それに対する呼び出し (.name、.val()、.innerHTML) は undefined を返します。
また、これは li 要素をクリックするステップです。
When /^I click on the "(.*?)" category$/ do |category_name|
@category = Category.find_by_name(category_name)
page.find('li', id: "category_#{@category.id}").click
end
リクエストは実際に行われますが、ラジオボタンがまったく選択されていないかのように、この後の手順は失敗します。何か案は?