GMT+0900タイトルの組み合わせでE2Eテストをやったのでやり方を書いてみます。2.31.488763MinitestはRubyの標準テストフレームワークです。CapybaraはSeleniumのラッパー的なものです。Chromeは59以上でないとヘッドレスで実行できません。Chromeとchromedriverのバージョンの組み合わせによっては動かないのでダウンロードページで対応バージョンを確認した方がいいです。chromedriverは2.30までだとselenium-webdriverでフォームの入力時にエラーが出るので2.31を使用します。今までのもろもろの記事で個別に書いているものもあるんですけど、まとまってなかったりするので一から書きます。bundlerのインストール必要なgemをインストールするのにbundlerを使うので、まずbundlerをインストールします。bundlerChromeのインストール一から書くとか言っときながら、これに関してはつい最近書いたのでそっち見てください。chromedriverのインストールこっから環境にあわせたものをダウンロードします。前述の通り2.31以上のものをダウンロードします。現時点では2.31が最新です。curlでダウンロードしてきて解凍したものをChromeと同じディレクトリに放り込みます。Chromeはデフォルトだと/usr/bin/にインストールされるはず。chromeと同じディレクトリに放り込む。/usr/bin/chromedriverコードを書く今回は下記のような構成にします。./srcディレクトリにテスト用のヘルパーであるtest_helper.rbを作成し、テストコードは./src/features/blog_test.rbに記述します。test_helper.rb実際にガッツリやる場合はSelenium公式推奨と言われるPageObjectパターンを採用した構成になったりすると思います。PageObejectパターンについては下記2つの記事が非常に参考になります。/cybozu_ikyu_e2eGemfileの作成とインストールテストで使用するgemをインストールするためにGemfileを作成します。下記のような感じになります。"minitest-line"そのあと、Gemfileに記述したgemをインストールします。installtest_helper.rbの作成テスト用のヘルパーであるtest_helper.rbを作成します。:headless_chromeインストールしたChromeのバイナリのパスとかヘッドレスで実行するオプションとかを指定して変数(chrome_options)に放り込みます。この変数をCapybara::Selenium::Driver.newのコンストラクタに放り込みます。これは下記のサイトを参考にしていい感じに作りました。Chromeテストコード書くテストコードを書きます。今回はこのサイトの検索ページにある文字列を入力して、その結果に「ubuntuにchromeをインストールする」という文字列が含まれていた場合は成功、そうでない場合は失敗という風にしてみます。ないと思いますが、実際にやるときはこのサイトをテスト代わりに使用しないでください。endendrequireで先に作成したtest_helperをロードします。検索ページのテキストボックスのidがlocal-search-inputなので、各テストではそれにfill_inで文字列を入力しています。その後にassert_contentで指定した文字列が含まれているかassertしています。teardownで成功・失敗に応じてOKかNGを表示するようにしてみました。ちなみに、chromedriverが2.30以下の場合はここのfill_inで「仮想ディスプレイの使用を検討してください」みたいなエラーが出て落ちます。非ヘッドレスで実行した場合のイメージ前述のテストコードを非ヘッドレスでテストした場合の図を貼り付けときます。成功のパターンは下記のようになります。「ubuntuにchromeをインストールする」が表示されているので成功です。今回の成功の条件である「ubuntuにchromeをインストールする」が表示されていないので失敗です。実行するテストを実行してみます。blog_test.rbを実行します。18こんな感じで結果が表示されます。表示される内容はインストールしているgemに応じて変わります。表示のフォーマットについてはこちらの記事が参考になります。YoshinoriN)。