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番号を指定しても可です