2012-09-18 36 views
0

我试图检查一个表单提交在RoR,它在开发和生产工作,但不是当我运行黄瓜自动化测试使用@javascript标记。该观点是这样的:黄瓜+水豚+硒测试失败,试图选择隐藏的单选按钮

<%= 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> 

如果我把这样的脚本内循环:

​​

它的工作,但我觉得效率不高。在前一种解决方案中,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 

该请求确实制成,但如同没有选择的单选按钮在所有,而这一次之后的步骤失败。有任何想法吗?

+0

这似乎与使用$(本)的问题造成的。我也尝试使用$(event.target),但它有相同的问题。 –

回答

0
  • 如果你想点击单选按钮,这是隐藏的,下面加在你env.rb

    Capybara.ignore_hidden_​​elements =真

恕我直言:水豚被忽略隐藏的元素默认

  • 尝试单击单选按钮(例如,用户xpath或其他),并点击它不在李
0

这个问题是从一年前,但也许这将帮助别人......

以前的答案是走了一半。你想设置:Capybara.ignore_hidden_elements = true

然后...

page.execute_script("$('element').show()") 
choose('element')