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ファイルを落とす。
- Downloads - selenium - Browser automation framework - Google Project Hosting
- selenium-server-standalone-2.39.0.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
- Is it possible to hide the browser in Selenium RC? - Stack Overflow
- Is it possible to use Ruby (not jRuby) frontend of the Selenium 2 (WebDriver) with HtmlUnit backend? - Stack Overflow
- Selenium 使いのための PhantomJS 解説 - Qiita
- PhantomJS 1.8 Release Notes | PhantomJS
- RubyBindings - selenium - Ruby bindings - Browser automation framework - Google Project Hosting