Seleniumでテストを実行するとき、いちいちブラウザを立ち上げると重くて遅い。

そこで、ブラウザを立ち上げずに、 ヘッドレス(headless)にSeleniumを実行する方法を調べてみた。

Seleniumは実行するブラウザを自由にいれかえることができる。 そこで、特殊なブラウザを指定することによって実現できそうだ。

Environment

  • windows 7 64bit
  • ruby 2.0

環境はRuby & Windowsです。

Base

このコードを改造する。ベースのドライバは firefox

require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "https://google.com"
element = driver.find_element(:name, 'q')
element.send_keys "PhantomJS"
element.submit
puts driver.title

driver.quit

HtmlUnit Driver

HtmlUnit Driverの特徴は、

  • HtmlUnit は GUI を持たない WebBrowser の Java ベースの実装
  • Java 以外の言語でこのドライバーを使用するには Selenium サーバーが必要

ということで、以下からSelenium Serverを取ってくる。 検索窓から selenium-serverと検索して、最新版のjarファイルを落とす。

コマンドラインから起動。

java -jar selenium-server-standalone-2.39.0.jar

  • この ページに従って、以下のように書く。

driver = Selenium::WebDriver.for :remote, :url => “https://localhost:4444/wd/hub”, :desired_capabilities => :htmlunit

ページの取得は成功したけれども、検索窓を探すことができなかった。別の手段をば。

PhantomJS Driver

PhantomJS Driverは、No Browserなブラウザ。(意味不明)

PhantomJSの内部でGhostDriverというものを利用して、 これでNo GUIなブラウザを実現しているらしい。

以下のサイトからwindows用のバイナリをダウンロードして、 phantomjs.exeするだけ。

phantomjs.exe –webdriver=9134

require "selenium-webdriver"

driver = Selenium::WebDriver.for(:remote, :url => "https://localhost:9134")

driver.navigate.to "https://google.com"
element = driver.find_element(:name, 'q')
element.send_keys "PhantomJS"
element.submit
puts driver.title
driver.quit

また、phantom.exeに環境変数PATHを通すことで、 以下のように書くことができる。

こうすると、 rubyスクリプト起動の延長でphantomjsを起動してportに接続してくれる。

# driver = Selenium::WebDriver.for(:remote, :url => "https://localhost:9134")
driver = Selenium::WebDriver.for :phantomjs

gem headless

linuxだとこういう方法もある。

Xvfbという仮想ブラウザウ利用するのでwindowsではできない。

Special Thanks