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) は 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

リクエストは実際に行われますが、ラジオボタンがまったく選択されていないかのように、この後の手順は失敗します。何か案は?

4

2 に答える 2

0
  • 非表示になっているラジオボタンをクリックする場合は、env.rbに以下を追加します。

    Capybara.ignore_hidden_​​elements = true

私見:カピバラはデフォルトで隠された要素を無視します

  • ラジオボタン(たとえば、ユーザーxpathなど)をクリックして、liではなくクリックしてみてください
于 2013-02-13T12:35:01.980 に答える
0

この質問は1年前のものですが、多分これは誰かを助けるでしょう...

前の答えは半分です。あなたは設定したい:Capybara.ignore_hidden_elements = true

それから...

page.execute_script("$('element').show()")
choose('element')
于 2014-05-21T14:41:44.997 に答える