ChromeDriverを使ってJavaScriptのテストをしようとしたらハマったよ
せっかくなので備忘録的に書いておきます。
ちょっと時間があったのでRSpectを真面目に勉強しようと、「Everyday Rails - RSpec による Rails テスト入門」とかいうのを買って、いそいそと進めておりました。
基本ができてないままその都度調べてやっちゃうと、どんどん自己流に走ってしまっちゃうので、ちょっと本腰を入れて基本からやってみようということで。
サンプルコードもGitHubから落とせるし、少しずつ順を追って説明してくれるので、RailTutorialを一巡した程度の知識でも、難なく読める内容で、いい感じでした、6章でハマるまでは。
6章途中では、
Capybara/Selenium-webdriver/Chrome-driverを用いて、Javascriptのスペックを記述するのですが、本のコードをそのまま写経しても・・・
Capybara::DriverNotFoundError:
no driver called :selenium_chrome was found, available drivers: :rack_test, :selenium
と怒られて一向にテストしてくれません。対応はというと。
①そもそもChromeが入っていない。
明らかにDriverが無いよ感満載なので、ちょっと考えてみたところ、根っからのFireFox教の俺のPCにChromeなんていう異教徒がいるわけがない、ということに気づきました。
こんなところで宗教戦争をしてても仕方がないので、
CentOS7でselenium、Chrome Web Driveのインストール方法 - Qiita
こんな感じの記事(一番上のパラグラフです)を見つつ、インストール。
ま、こんなドジっ子はそうそういませんってか。
②なんかドライバが登録されてない。
①をやっても結局上手くいかないのでよくよくエラーメッセージを読んでみると、’selenium_chrome’なんてもの知らない、的なオーラが漂ってます。
ドライバを追加するには、/spec/support/capybara.rbに、
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
を入れてあげることで、ちゃんと認識してくれるみたいです。
↓こっからパチってきました。
GitHub - willnet/capybara-readme-ja: Capybara の README 和訳
③GUI出力の設定をする。
①②をやったところ、今度は、
Selenium::WebDriver::Error::UnknownError:
unknown error: Chrome failed to start: exited abnormally
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
(Driver info: chromedriver=2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d),platform=Linux 3.10.0-229.el7.x86_64 x86_64)
といって怒られてしまいました。
よく考えると、今回はVagrantの仮想マシン上で作業してたので、GUIに接続するときにうまくいかないみたいです(適当)。
ここで、一旦ホストに戻って、Vagrantfileに、
config.ssh.forward_x11 = true
とかいう呪文を下の方にでも書いておいてあげると、なぜかいけるみたいです。
上記①〜③でなんとかイイ感じにテストが終わりました。
時間があるときにでももう少し調べてみたいです。
お役に立てれば幸いです。