4

RailsアプリでCapybaraとRspecを使用していますが、次のメッセージでいくつかのテストに失敗し続けています:

Failure/Error: it { should have_content('error') }
Capybara::Ambiguous:
  Ambiguous match, found 2 elements matching xpath "/html"

私のテストでは、アプリは「エラー」コンテンツを含む 2 つのメッセージをレンダリングする必要があるためです。

<% if object.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-error">
      <%= t('the_form_contains') %>
      <%= pluralize(object.errors.count, t('error')) %>.
    </div>
    <ul>
      <% object.errors.full_messages.each do |msg| %>
        <li>* <%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>

そして、ここで私のアプリケーションのレイアウト:

<!DOCTYPE html>
<html>
<head>
  <title><%= full_title(yield(:title)) %></title>
  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
  <%= render 'layouts/shim' %>
</head>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <div class="row-fluid">
        <div class="offset2 span8 offset2">
          <% flash.each do |key,value| %>
            <div class="alert alert-<%= key %>"><%= value %></div>
          <% end %>
        </div>
      </div>
      <%= yield %>
      <%= render 'layouts/footer' %>
      <%= debug(params) if Rails.env.development? %>
    </div>
  </body>
</html>

それを渡す方法(オプションなど)を知っていますか?

編集

使用しましたが、追加のタグもページ外のエラーメッセージもsave_and_open_page見つかりませんでした。htmlしかし、削除する<!DOCTYPE html>と機能します。<!DOCTYPE html>開始<html>タグが必要ですか? <!DOCTYPE html>結果なしで削除できますか?

<!DOCTYPE html>
<html>
  <head>
    <title>Le Troquet</title>
    <link data-turbolinks-track="true" href="/assets/application.css" media="all" rel="stylesheet" />
    <script data-turbolinks-track="true" src="/assets/application.js"></script>

    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

  </head>
  <body>
     .
     .
     .
     .
     .
<!-- There is no html tag here -->
     .
     .
     .
     .
  </body>
</html>
4

3 に答える 3

4

問題は、次のいずれかであるようです。

  1. ページに2 つの<html>タグがあるか、場合によっては
  2. 「エラー」テキストはタグの外側に表示されます。<html></html>

このディスカッションを参照してください:あいまいな一致、xpath "/html" に一致する 2 つの要素が見つかりました。

于 2013-06-07T05:53:20.167 に答える
4

</html>終了タグの外側の要素を確認してください。私の場合 (HAML)、不適切にインデントされた JavaScript タグがありました

%html
  ...
:javascript

修理

%html
  ...
  :javascript
    ...

:javascript をインデントして html タグ内に含めると、問題が解決しました。

于 2016-01-18T21:16:05.833 に答える