2016-04-14 4 views
1

RSpecとCapybaraを使ってテストしています。私はいくつかのコード行をテストするためにbinding.pryを使用しています。しかし、カピバラは私が必要とする要素を見つけることができません。セレクタとして使用できるhtml要素をリストするコマンドがありますか?CapybaraとRSpecを使用しているときにページ上のどの要素が表示されているかを確認

FYI、あなたはあなたのてこのセッションでpage.bodyをプリントアウトしてみてください...

答えて

2

これを行う組み込みの方法はありませんが、使用しているドライバによっては、求めているものが得られる場合があります。サポートしている実際のブラウザドライバのいずれかを使用している場合:あなたがいる場合のxpath

find("form.***").all(:xpath, './/child::*').map {|el| el['outerHTML']} 

を使用することができ、実際のブラウザでスコープのサポート:スコープ疑似クラスを使用するには無い場合

find("form.***").all(':scope > *').map {|el| el['outerHTML']} 

ような何かを行うことができますあなたはそれらがあなたの最初の発見の子であるHTML要素の配列を与え、あなたは何CLAを見るようになる

find("form.***").all('> *').map {|el| el.native.to_s } 

ような何かを行うことができ、デフォルトのラックテストドライバーを使用してsses/attributes/etcを持ち、使いやすくするためのメソッドに変えることは明らかです。これは可能ですが、Capybaraを使用する際にセレクタ内のすべての祖先を指定すると、脆弱なテストにつながる可能性があることに注意してください。ページを変更した場合、通常はカピバラ提供のセレクタを使用して特定のセレクタ可能な限り相互に作用する要素。

0

これが私の最初の質問であり、私は尋ねる前に、可能な限り調査してみました。現在のドキュメントのDOMのスナップショットを出力します。

カピバラのドキュメントは、読むのが少し難しいかもしれません。あなたが知る必要があるのは、pageis equivalent to Capybara.current_sessionです。 Capybara::Sessionインスタンスhas the method bodyは、DOMのスナップショットを保持します。

+0

それは私が尋ねていたことを実際に達成していません。当時の私の決断はpage.find( "form。*** div。*** button。***)。クリック 私が見たことは、 **)私はどの要素が選択できるのかを知ることができました。基本的にはdiv。***、div。***のようなリストを印刷し、そこから私が望むものを選び、私が望むセレクターが見つかるまで掘削を続けます。 – codeavenger07

+0

情報ありがとうございました! – codeavenger07

関連する問題