というわけで次は cucumber と組み合わせてみる。
準備するもの
さっきの続きなので、追加したものだけ。
Selenium陣営
- Development Kit : http://github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe
- ruby 1.9.2 は入れてる。
Redmine陣営
特になし。
Capybara 使った cucuber の雛形を持ってくる
Railsアプリを準備
> rails new test-app
Gemfile に cucumber-rails, capybara を追加
group test に突っ込んだ。
group :test do # Pretty printed test output gem 'turn', :require => false gem 'cucumber-rails' gem 'capybara' end
雛形を作る
> cd test-app > ruby script/rails generate cucumber:install --capybara
雛形だけがほしかったので、
test-app\features にあるファイルとフォルダを、どこぞにコピーする。
+ using-cucumber + step_definitions + web_steps.rb + support + env.rb + paths.rb + selectors.rb
動くようにコードを改変
rails アプリの中で動かすならこれでいいのだけれど、
今回は外から rails のテストをするので、改変しないとエラーが出て動かない。
※ 多分ちゃんとやり方があるに違いない。
env.rb
# -*- encoding: utf-8 -*- require "Capybara" require "Capybara/cucumber" require 'test/unit/assertions' World(Test::Unit::Assertions) Capybara.app_host = "http://127.0.0.1:3000" Capybara.default_driver = :selenium Capybara.javascript_driver = :selenium Capybara.default_wait_time = 2 Capybara.add_selector(:name) do xpath { |name| XPath.descendant[XPath.attr(:name) == name.to_s] } match { |value| value.is_a?(Symbol) } end Capybara.add_selector(:class_name) do xpath { |class_name| XPath.descendant[XPath.attr(:class) == class_name.to_s] } match { |value| value.is_a?(Symbol) } end
feature をもくもくと書く
web_steps.rb も成長させる
できあがった feature はこんな感じ。
redmine_walpurugis_night.feature
Feature: redmine_walpurgis_nights In order to extend life of universe As Incubator wants more energy. Scenario: Register new issue Given I go to toppage When I follow "ログイン" And I fill in "username" with "qb" And I fill in "password" with "homuhomu" And I press "login" When I select "Walpurgis Night" And I follow "New issue" When I select "Feature" from "issue_tracker_id" And I fill in "issue_subject" with "As Incubator, I want magical girl." And I fill in "issue_description" with "foobaa" And I select "High" from "issue_priority_id" And I select "qb incubator" from "issue_assigned_to_id" And I press "commit" When I follow "Issues" Then I should see following data at the head of issue list: |tracker|status|priority|subject |assigned_to | |Feature|New |High |As Incubator, I want magical girl.|qb incubator|
詰まったところ。
- テーブルを見つけて、目的の値を取り出す(WebDriver と同じような操作で大丈夫だった)
初めての人がつまづきそうなところは、まとめたほうがいいかもなー。
残りの宿題
- コードを github にあげる
- akephalos を使ってみる
- SeleniumIDE の formatter として cucumber(capybara) を作る
- アル程度、定型にしちゃえば何とかできるじゃないのかな? と思ったり。これないと不便でしょうがない。