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)
@terut js: trueの場合はdriverがCapybara-Webkitになる(spec_helperに書いてあれば)ので異なるのでしょう。僕はsave_and_open_pageとか、pryで止めて見てました。
— チュッチュとはえ10歳 (@tohae) April 18, 2013
とのこと。
CapybaraのREADMEにも書いてあるDebuggingの項目でやるのがなんだかんだでいいのかもしれない。
スクリーンショット(save_screenshot)だったりHTMLを吐き出す(save_and_open_page)だったり、pryだったり。