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
と指定ができます。
スクリーンショットはGoogle Chrome/Firefoxともに可能ですが、Google Chromeの場合は見えている範囲のみ、Firefoxの場合はスクロールも含めて全体と言った違いがあるようです。
Selenium Serverの多くはローカルで立てて、開発用途に使うかと思いますが、Docker Seleniumの場合はクラウド上でも簡単に立てられるので本番環境の動作チェックにも使いやすいです。何より環境の構築がとても簡単なので、テストを書く前の苦労が大幅に軽減されるでしょう。
Docker Seleniumを試す際にはぜひさくらのクラウドとともに!
elgalu/docker-selenium Repository | Docker Hub Registry - Repositories of Docker Images