SeleniumサーバもDockerで。「Docker Selenium」レビュー

DockerはIT界隈で広まりつつも、なかなか実践的に使うことができないという人は多いのではないかとかと思います。しかし何もサーバ運用環境として使わずとも、使いどころはあります。その一つがサーバソフトウェアのインストールです。

サーバソフトウェアはインストールの手間と、その後のバージョンアップや他のソフトウェアで使っている共通ライブラリのコンフリクトなど、とかく運用が面倒です。基幹系システムが入っているサーバに他のソフトウェアをインストールするのは躊躇しますよね。

そういったときにDockerを使えばそれぞれのソフトウェアの環境が分けられるのでセキュリティ、運用的に安心できます。今回はその一つとしてDocker Selenium、Dockerを使ったSeleniumサーバを紹介します。

Docker Seleniumのインストール

インストールはとても簡単です。なおDockerはインストールされているものとします。今回はさくらのクラウドでCoreOSを立ち上げています。

ログインしたらdockerコマンドを実行します。

$ sudo docker run --privileged -p 4444:4444 -p 5900:5900 elgalu/docker-selenium

後は待っていれば終わりです。 /etc/hosts 書き込む処理が行われるところでエラーになるのですが、動作には影響がないようです。

VNCで接続

コンテナが立ち上がると、5900番ポートでVNCが立ち上がります(4444はSelenium Server用です)。RealVNCなどから接続が可能です。なお初期設定のパスワードはsecretになります。これはDockerfileに記述されていますのでフォークして修正するのが良さそうです。

接続後の画面
接続後の画面

Docker Seleniumにはfluxboxという軽量なWindowマネージャがインストールされますので、このようにGUIで画面が確認できます。

Seleniumを試す

この時点ですでにSelenium Serverが立ち上がっていますので、http://IPアドレス:4444 を指定して実行が可能です。

たとえば次のようなコードが実行できます(Rubyで実行しています。gem install selenium-webdriver を行ってください)。

require "selenium-webdriver"

@driver = Selenium::WebDriver.for :remote, :url => "http://IPアドレス:4444/wd/hub", :desired_capabilities => :firefox

@driver.navigate.to "https://knowledge.sakura.ad.jp/" 

sleep(10) 

puts @driver.title

@driver.find_elements(:css, "h2 a").first.click

sleep(10) 

puts @driver.current_url

@driver.save_screenshot('./firefox.png')

@driver.quit

たとえばこれでさくらのナレッジにアクセスして、一番上にある記事をクリックすると言ったスクリプトになります。あらかじめFirefoxとGoogle Chromeは入っていますので、

# Firefox
@driver = Selenium::WebDriver.for :remote, :url => "http://IPアドレス:4444/wd/hub", :desired_capabilities => :firefox

# Google Chrome
@driver = Selenium::WebDriver.for :remote, :url => "http://IPアドレス:4444/wd/hub", :desired_capabilities => :chrome

と指定ができます。

Firefoxで実行中。タイトルは文字化けしていますがコンテンツは読めます。
Firefoxで実行中。タイトルは文字化けしていますがコンテンツは読めます。
クリックもでき、画面遷移しました。スリープは適当に調整が必要です。
クリックもでき、画面遷移しました。スリープは適当に調整が必要です。
Google Chrome版。レンダリングはこちらのが高速かも。
Google Chrome版。レンダリングはこちらのが高速かも。

スクリーンショットはGoogle Chrome/Firefoxともに可能ですが、Google Chromeの場合は見えている範囲のみ、Firefoxの場合はスクロールも含めて全体と言った違いがあるようです。

Google Chromeのスクリーンショット保存。
Google Chromeのスクリーンショット保存。
Firefoxのスクリーンショット保存。縦長なので一部だけ。
Firefoxのスクリーンショット保存。縦長なので一部だけ。

Selenium Serverの多くはローカルで立てて、開発用途に使うかと思いますが、Docker Seleniumの場合はクラウド上でも簡単に立てられるので本番環境の動作チェックにも使いやすいです。何より環境の構築がとても簡単なので、テストを書く前の苦労が大幅に軽減されるでしょう。

Docker Seleniumを試す際にはぜひさくらのクラウドとともに!

elgalu/docker-selenium Repository | Docker Hub Registry - Repositories of Docker Images

elgalu/docker-selenium

おしらせ

banner_cloud