我正在尝试检查在 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)都返回未定义。
此外,这是单击 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
确实提出了请求,但好像根本没有选择单选按钮,并且这一步之后的步骤失败了。有任何想法吗?