ChromeDriverを使ってJavaScriptのテストをしようとしたらハマったよ

せっかくなので備忘録的に書いておきます。

 

ちょっと時間があったのでRSpectを真面目に勉強しようと、「Everyday Rails - RSpec による Rails テスト入門」とかいうのを買って、いそいそと進めておりました。

 

leanpub.com

基本ができてないままその都度調べてやっちゃうと、どんどん自己流に走ってしまっちゃうので、ちょっと本腰を入れて基本からやってみようということで。

 

サンプルコードも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

とかいう呪文を下の方にでも書いておいてあげると、なぜかいけるみたいです。

 

上記①〜③でなんとかイイ感じにテストが終わりました。

時間があるときにでももう少し調べてみたいです。

 

お役に立てれば幸いです。