7

私は周りを検索しましたが、これを行う方法が見つかりません。

EmberJS/Rails アプリのキュウリ機能で Poltergeist ドライバーを使用して Capybara テストを実行しています。ヘッドレス vagrant インスタンス内で実行しているため、page.driver.debug を使用できません。トラブルシューティングは利用できませんが、スクリーンショットは機能し、Chrome 開発ツールは問題のページを検査して正しい要素を示します。

失敗するキュウリのシナリオがありますが、それは検索が機能していないためです。私のテストは次のようになります。

When(/^I delete description "(.*?)"$/) do |description|
  within :css, '#myform' do
    first('label', :text => /#{description}/).find(:xpath, '..').find(:css, 'button.delete')
  end
end

問題の要素が見つかりません。DOM の関連セクションは次のとおりです。

<form id="myform">
  <div class="row-fluid question">
      <div class="span12">
        <div class="padding">
          <div id="ember576" class="ember-view is-viewing-edit-controls">
            <button class="delete" data-ember-action="31"></button>
            <button class="edit" data-ember-action="32"></button>
            <button class="insert_above" data-ember-action="33"></button>
            <button class="insert_below" data-ember-action="34"></button>
            <button class="move_up" data-ember-action="35"></button>
            <button class="move_down" data-ember-action="36"></button>
            <label class="question" data-ember-action="37">Enter your first name</label>
            <input id="ember577" class="ember-view ember-text-field">
            <span class="error"></span>
          </div>
        </div>
    </div>
  </div>
</form>

binding.pry を追加すると、次のようになります。

first('label', :text => /#{description}/).find(:xpath, '..')
                                                                                              │

私にこの応答を与える:

=> #<Capybara::Element tag="div">

この:

first('label', :text => /#{description}/).find(:xpath, '..')
                                                                                              │

私にこの応答を与える:

=> "Enter your first name"

しかし、完全な発見:

first('label', :text => /#{description}/).find(:xpath, '..').find(:css, 'button.delete')

私にこの応答を与える:

Capybara::ElementNotFound: Unable to find css "button.delete"

これは親/兄弟の問題だと思いますが、トラブルシューティングはできません。だから私はいくつかの質問があると思います:

  1. デバッグのために、すべての子要素を一覧表示するポルターガイスト ドライバーはありますか?
  2. xpath セレクターに何か問題がありますか? ..返されているという事実はCapybara::Element tag="div"、私が正しい親要素を持っていると思います (そして、私が言ったように、他の同様のテストの他のページでも機能します) が、それがどの要素であるかを確認する方法がありません. xpath を取得する方法や、要素を識別するのに役立つその他のものを見つけることができません。
4

2 に答える 2

2

私はこれを理解しました。テストは正常に機能していましたが、シナリオにアクション ステップがありませんでした。

しかし、ページ上で jQuery を実行することで、どのようにしてコンテンツを取得したかを知っておくと便利だと思いました。テストに binding.pry を追加した後、binding.pry でコンソールに jQuery の結果を記録しました。

# this gave me the expected contents and verified that button.delete was a child
page.execute_script("console.log($('#myform label.question').parent().html())");

# and this gave me the classes to demonstrate that it was the correct div
page.execute_script("console.log($('#myform label.question').parent().attr('class'))");

私が探していたラベルが最初のものであることを知っていたので、セレクターでショートカットを取りましたが、セレクターは重要ではありません。

于 2013-09-05T14:43:30.043 に答える