Dockerコンテナ上の仮想フレームバッファにchromeやらfirefoxやらを起動してヘッドレスにSelenium+Behatの自動受け入れテストを走らせるまでの作業ログ

xvfbインストール

$ sudo apt-get install -y xvfb

xvfbを起動する

$ Xvfb :99 -screen 0 1920x1200x24 > /dev/null &

xvfb:シェル化しておく

毎回起動するのが面倒なのでシェル化しておく。ついでにディスプレイ番号をseleniumと合わせて99にしておく(任意)

$ sudo echo "Xvfb :99 -screen 0 1920x1200x24 > /dev/null &" > /usr/local/bin/selenium-xvfb
$ sudo chmod +x /usr/local/bin/selenium-xvfb

seleniumとbehatのインストール

seleniumとbehatのインストールはBehat+Selenium Webdriverで受け入れテストの自動化をやってみたと同じ

Google Chromeインストール

$ wget -q -O - "https://dl-ssl.google.com/linux/linux_signing_key.pub" | apt-key add -
$ sudo echo 'deb http://dl.google.com/linux/chrome/deb/ stable main' >> /etc/apt/sources.list.d/google-chrome.list
$ sudo apt-get update
$ sudo apt-get install -y google-chrome-stable

Firefoxインストール

$ sudo apt-get install -y firefox-esr

仮想フレームバッファにchromeを起動してスクリーンショットを撮ってみる(任意)

最初にXvfbを起動して仮想フレームバッファを用意

$ selenium-xvfb

Imagemagick使用。

// Imagemagick入ってない人用
$ apt-get install -y imagemagick

// 仮想フレームバッファにChrome起動
$ DISPLAY=:99 google-chrome http://example.com &
[1] 2158

// スクリーンショットを撮る
$ DISPLAY=:99 import -window root example.png

// ちゃんと撮れてるか角煮n
$ ls example.png
example.png

// Chrome終了
$ ps ax | grep example.com
2158 pts/0    Sl     0:01 /opt/google/chrome/chrome http://example.com

$ sudo kill -9 2158
[1]+  強制終了            DISPLAY=:99 google-chrome http://example.com

仮想フレームバッファにseleniumを起動

最初にXvfbを起動して仮想フレームバッファを用意

$ selenium-xvfb

$ ps ax | grep Xvfb
2013 pts/0    Sl     0:00 Xvfb :99 -screen 0 1920x1200x24

次にseleniumを起動。(chromedriverは入ってる前提)

$ DISPLAY=:99 java -jar /usr/local/bin/selenium-server-standalone.jar -Dwebdriver.chrome.driver=/usr/local/lib/selenium/chromedriver &

behat実行。

$ DISPLAY=:99 ./bin/behat features/test.feature

テストが走ればおわり。

seleniumやbehatも全てDISPLAY=:99で実行しないと動かない所に少しハマった

seleniumをDISPLAY=:99にする、と明確に用途を分けたかったので、私は環境変数にはせずに毎回指定していますが、指定したくない人やjenkinsおじさんを使う場合等は環境変数にDISPLAY番号を指定しても可です