読者です 読者をやめる 読者になる 読者になる

解せぬ日記

雑な話をする

Capybaraが実行対象にしてるHTMLをコンソールに表示する

みんなー、Capybaraおじさんだよー。

嘘です、すいません。

TDDがデファクトになっている昨今、こんな告白をするのは非常に勇気がいることなのだけど、僕はCapybaraをまともに書いたことがなかった。

PHPの保守おじさんだったり、Objective-Cおじさんだったりをやっていて、時間ある時はRubyでツールを書いたりしてたのでRSpecのみだった。

んで、Capybaraおじさんになる機会が巡ってきたので、書いてたのだけど、エラーが非常に分かりにくかったりした。

実行対象になってるHTMLは puts page.body とかで見れるし、実行したHTMLを吐いておいて失敗したらブラウザで対象のHTMLを起動したりするGemなんかもあったんだけど、もうちょっと軽く見たい欲があった。

Capybaraをガンガン書いてる同僚に聞いても知らないというし、find とかで Capybara::Element を取り出して、対象のInner HTMLを眺められたりしないかなーとか思ってちょっと書いてみた。

find('div.foo1'){|x| puts x }
=> <div class="bar">
     <p>unkode<p>
   <div>

そして native には Nokogiri のオブジェクトが来ないことがあって、これじゃダメなケースがあることが分かり、ウヘヘとなってるのが今。

どうやら js: true の場合に Driver が変わる?のか native へは Nokogiri のオブジェクトが来ないように見えるんだけど、正しく把握するためにもソースを追ってみたい。

またクソみたいなコードをインターネット上に吐き出したワケだけど、ただまあ大体の場合には使える感じなので、とりあえずよしとして、また後で考えようと思う。

Capybaraをガシガシ書いてる人はHTML吐き出して確認してるのかしら?

それとも慣れてるから、hamlなり、erbなりのコード見りゃ余裕で書けるってことなのかな?

追記(2013/04/19)

とのこと。

CapybaraのREADMEにも書いてあるDebuggingの項目でやるのがなんだかんだでいいのかもしれない。

スクリーンショット(save_screenshot)だったりHTMLを吐き出す(save_and_open_page)だったり、pryだったり。