Windows でも capybara-webkit でテストしたい

会社でも Capybaracapybara-webkit を使った integration test をしたいので、Windows 7 で環境を作ってみる。

基本的にここの手順に従っているが、左の通りにしなくても良いようなので、以下の手順で行った。

RubyとDevKitのインストール

RubyInstaller.org から、Ruby 2.0 の最新版と対応するDevelopment Kit*1をダウンロード。

Ruby は C:\Ruby200 などにインストール。途中で環境変数PATHにRubyのbinフォルダを追加するオプションがあるので、チェックしておく。

Development Kit は C:\DevKit などに展開。インストール手順はGitHubInstallation Instructions のページにあるが、コマンドプロンプトで以下のようにする。

pushd C:\DevKit
ruby dk.rb init
ruby dk.rb install

Qtのインストール

Qt project のページから Qt 4.8 系で "MinGW" と書いてあるインストーラ*2をダウンロードし、インストールする。

インストール中、"This package requires MinGW with GCC 4.8.2 .... Please specify a directory ...." のようなメッセージが出るので、入力欄に Development Kit のフォルダの中にある mingw フォルダを指定する。例えば、 C:\DevKit\mingw など。

インストールしたら、Windows環境変数PATHにQtのインストール先のbinフォルダを追加する。例えば C:\Qt\4.8.6\bin など。

更に、Qtのインストール先の mkspecs\win32-g++\qmake.conf の63行目あたりにある

QMAKE_LFLAGS		=

を、以下のように変更する。

QMAKE_LFLAGS		= -static-libgcc -static-libstdc++

公式の手順ではQMAKE_RCCも変更するようにあるが、最初から変更されているようだった。

capybara-webkit のインストール

ここまで準備したら、コマンドプロンプトを新しく開き、

gem install capybara-webkit

で、普通にインストールされる。

Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed capybara-webkit-1.1.1
Parsing documentation for capybara-webkit-1.1.1
Installing ri documentation for capybara-webkit-1.1.1
1 gem installed

確認

以下のようなテストクラスを作って試してみた。

# coding: utf-8

require 'capybara-webkit'
require 'test/unit'

class GoogleSearchTestCase < Test::Unit::TestCase
  include Capybara::DSL

  def setup
    # Capybara-WebKit を使用
    Capybara.current_driver = :webkit
    Capybara.javascript_driver = :webkit
    # 外部のWebアプリが対象のため、サーバは起動しない
    Capybara.run_server = false
    # User-Agent を変更したい場合は、以下のようにする
    # page.driver.header('user-agent', 'User-Agent文字列')
  end

  def teardown
    Capybara.use_default_driver
  end

  def test_search
    # Google日本のトップページを表示
    visit 'http://www.google.co.jp/'

    # スクリーンショットを取得
    save_screenshot 'before.png'

    # q という名前の項目に「テスト」と入力
    fill_in 'q', :with => 'テスト'

    # 「Google 検索」というラベルのボタン/リンクをクリック
    click_on 'Google 検索'

    # 検索結果件数部分を取得
    stats = find('#resultStats').text.scan(/\d+(?:,\d+)*/)

    # 検索結果画面のスクリーンショットを取得
    save_screenshot 'after.png'

    # 結果件数の取得と、規定件数を超えたことの検証
    assert_operator stats.length, :>=, 1, '結果件数が取得できません'
    assert_operator stats[0].gsub(/\D/, '').to_i, :>, 10_000_000, '結果件数が不足しています'
  end
end

実行*3

> ruby capybara-test.rb

Run options:

# Running tests:

Finished tests in 2.405000s, 0.4158 tests/s, 0.8316 assertions/s.
1 tests, 2 assertions, 0 failures, 0 errors, 0 skips

ruby -v: ruby 2.0.0p451 (2014-02-24) [i386-mingw32]

スクリーンショットもちゃんと取れている。

これは簡単で良いですね。

*1:以前 Nokogiri のインストールが64bit版のDevelopment Kitではうまくいかなかったため、RubyもDevelopment Kitも32bit版を使用。capybara-webkit も32bit版でないとダメかどうかは不明

*2:Qt libraries 4.8.x for Windows (MinGW 〜) みたいの

*3:サジェスト機能で出てくるオーバーレイ要素のせいでたまにテストに失敗するが、フレームワークとしては動作に問題ない