0

我正在尝试检查在 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

确实提出了请求,但好像根本没有选择单选按钮,并且这一步之后的步骤失败了。有任何想法吗?

4

2 回答 2

0

这个问题来自一年前,但也许这会对某人有所帮助......

前面的答案已经成功了一半。您确实要设置:Capybara.ignore_hidden_elements = true

然后...

page.execute_script("$('element').show()")
choose('element')
于 2014-05-21T14:41:44.997 回答
0
  • 如果要单击隐藏的单选按钮,请在 env.rb 中添加以下内容

    Capybara.ignore_hidden_​​elements = true

恕我直言:Capybara 默认忽略隐藏元素

  • 尝试单击单选按钮(例如,用户 xpath 或其他东西)并单击它而不是 li
于 2013-02-13T12:35:01.980 回答