Capybara::Poltergeist で remote debug が動かない件
イントロ
タイトルの通り。Capybara::Poltergest
の目玉機能である remote debugging
がうまく動作しなくて、色々試行錯誤した話。
https://github.com/teampoltergeist/poltergeist#remote-debugging-experimental
環境
OSX 10.10.3
phantomjs 2.2.0
poltergeist 1.6.0
chromium 45.0.2411.0
remote debugging とは
poltergeist
の README に書いてあるとおり
Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, js_errors: false, inspector: true) end @session = Capybara::Session.new(:poltergeist) @session.visit url @session.driver.debug
のような感じで、driver.debug のタイミングでブラウザを起動し、debug できる機能らしい。
使い方は簡単で
Capybara::Poltergeist::Driver.new
にinspector: true
オプションを渡すdriver.debug
を呼ぶ
だけで良い。
苦戦した所
1. そもそもブラウザ起動しない
# @session.driver.debug を使った spec を実行させる bundle exec rspec ... Poltergeist execution paused. Press enter to continue. The file //localhost:9664 does not exist.
てっきり chrome
か何かが自動で起動するんだろうなぁと思ってたが、file //localhost:9664
がないと言われて怒られてしまう。
解決法
微妙なアプローチだけど、chromium
を install して回避してみた。
brew install Caskroom/cask/chromium
ln -s /opt/homebrew-cask/Caskroom/chromium/latest/chrome-mac/Chromium.app/Contents/MacOS/Chromium /usr/local/bin/chromium
として、chromium コマンドをむりやり PATH
に追加。
これだけで良い。
というのも、ブラウザ起動の仕組みは単純で、
chromium chromium-browser google-chrome
のいずれかのコマンドが PATH に通ってれば実行される、というものだから。
chromium http://www.google.co.jp
と叩いて chromium
が起動して google
トップページが表示されるならOKなはず。
google-chrome
コマンドがどうやら linux 環境でのコマンドというのと、mac で google-chrome
コマンドに相当するものを見つけられなかったので、こんな感じになりました。
Check failed: feature. と言われて起動できない。
ところが上記をやっても解決しない。
chromium
が動こうとするのだが、以下の様なエラーが出て、chromium
が起動できない。
Poltergeist execution paused. Press enter to continue. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:ERROR:component_loader.cc(154)] Failed to parse extension manifest. [86324:1299:0524/032749:FATAL:feature_provider.cc(75)] Check failed: feature. FeatureProvider 'behavior' does not contain Feature 'whitelisted_for_incognito'
色々調べてみたがよくわからない。
chromium
のソースコードにそれっぽいものを発見して、右往左往したけど挫折。
解決法
これは 予め chromium を起動した状態で、@session.driver.debug を実行する と回避できる。
要するに chromium
起動させて rspec 叩くわけです。
すると
のように file:///localhost:9664
を開こうとしているから、file:///
を消してエンター。
URL があらわれた。URL をクリック。
無事コンソール画面へ
まとめ
溢れんばかりのバッドノウハウ感。
poltergiest
の experimental な feature なので、参考になれば。
google-chrome
使うことができれば、妙なエラーはでない?のかもしれない。
みんなどうやってるの...