ヘッドレス環境でSeleniumを動かす


はじめに

WEBシステムを複数人で開発している際、共通ロジックに手を入れると、
「自分で作っている箇所は動いているが、他者が作っている箇所が動かなくなった!!」
ということが発生するケースがあります。

これは修正する関数の影響範囲を把握しきれないまま手を入れてしまった際に発生しますが、
もしこんな状況でもテストが自動的に行われていれば、早期発見に繋げることが出来ます。

今回はヘッドレス環境でXvfbを使ってSeleniumを動作させるテストを実施してみます。
(最近では各ブラウザがヘッドレス環境で動くモードが追加されているので、
少し古いやり方になるのかもしれません...。)

環境

[AWS EC2]
・CentOS 7
・Google Chrome 73.0.3683.86
・ChromeDriver 73.0.3683.68
・Python 2.7.14
・Selenium

Xvfbとは

・物理的なディスプレイがなくても仮想ディスプレイを作ってくれる(ヘッドレス環境)

Seleniumとは

・WEBアプリケーションの自動テストツール
・ブラウザに表示される要素を取得・操作することが出来る

ソフトウェアのインストール

Xvfbインストール

# sudo yum install xorg-x11-server-Xvfb

Chromeインストール

下記の記事を参考にインストールします。
CentOS7にChromeをインストール

ブラウザが文字化けしないように日本語フォントを入れます

yum install ipa-pgothic-fonts.noarch

ChromeDriverインストール

Chromeのバージョンに適したDriverをダウンロードして入れてください。

# sudo wget https://chromedriver.storage.googleapis.com/73.0.3683.68/chromedriver_linux64.zip
# sudo unzip chromedriver_linux64.zip
# sudo mv chromedriver /usr/local/bin
# sudo chmod 755 /usr/local/bin/chromedriver

python pipインストール

今回、Python 2.7.14が入っていたためそのまま利用します。
(Pythonが入っていない場合はインストールしてください)

# sudo yum -y install python-pip

Seleniumインストール

# sudo pip install selenium

仮想ディスプレイの起動

仮想ディスプレイを起動する番号とサイズを指定する

# export DISPLAY=:1
# sudo Xvfb :1 -screen 0 1280x1024x24 &

※ 停止

# sudo killall Xvfb

Seleniumで画面キャプチャーを取得してみる

Pythonサンプルコード

from selenium import webdriver
import os, time, sys

args = sys.argv

driver = webdriver.Chrome()
driver.get(args[1])
driver.set_window_size(1280, 1024)
time.sleep(5)
driver.save_screenshot(args[2])
driver.quit()

実行

弊社HPを取得してみる

python capture.py https://www.valuesccg.com/ valuesccg.png

結果

おわりに

一つのシステムを作りあげるためには、プロジェクトの管理から設計・開発・テストと
多岐に渡るため、人でなくとも出来る箇所はシステムに委譲することで、
人的リソースを減らすだけでなく、品質を高めることにつながると思います。
CI(継続的インテグレーション)の第一歩として試してみるのも良いかも知れませんね。

と言いつつ、それを設定するのもまた人なのですけど...。