Railsでの製作Tips Redmineのプラグイン製作

Selenium IDEからRubyのテストケースを書き出す

投稿日:2015年5月21日 更新日:

Selenium IDE

Seleniumはブラウザを自動操作してくれるソフト.
Selenium Web DriverとSelenium IDEがあり、Selenium Web Driverはインテグレーションテストでよく使うやつで、テストケースからブラウザを自動で操作して、テストしてくれる.
Selenium IDEは主にFirefoxのアドオンで、マクロっぽく、実際にブラウザを操作しながらテストを作ってくれたりする機能があってわかりやすい.
そして、さらに作ったテストはRspecやTestUnitに書き出すことができる.
つまり、Excelでいうところのとりあえず自動操作でマクロを作って、VBAで修正するみたいなやり方ができそう.

公式

Selenium何とかっていうツールがやたら色々あるのはどういうわけなのか

Selenium IDEのインストール

アドオンからの検索はわかりづらいので、公式からダウンロードする.
これもわかりにくくて、Selenium IDEのところのバージョン番号をクリックするとインストールできる.

screenshot

screenshot

Selenium IDEの立ち上げ方

Macの場合は、ツールからSelenium IDEを立ち上げることができる.
また、メニューにアイコンが登録されるので、そこからも立ち上げることができる.

はじめてのSelenium IDE

screenshot
右上の赤い丸いボタンで操作の記録を開始することができる.
おそらく最初から開始状態になっていると思うので、赤丸をマウスオーバーしてみると現在の状態がわかる.

RailsCastsによると、とりあえずテストに落としこむときはテストのデータを使うんだから、テスト環境でWebサーバを立ち上げると言っていたので、そうする.ポートを3001にしたのはdevelopmentと被らないようにするだけだから、developmentサーバを使ってない時は特に指定しなくてもいいかと思う

そして、selenium ideが記録状態になっていることを確認して、http://localhost:3001にアクセスする.

ここではRedmineを立ち上げてログインして、自作のプラグインのトップページにアクセスしてみる.

要素が表示されているかのチェックには、Firefoxの右クリックメニューが追加されていて、チェックしたい要素を右クリックすると、verifyText css=h2 時間表という項目があるので、それを選択すればテストに要素があるかの存在確認が追加される.

そして、最後にログアウトして、記録を終了する.
すると、記録は次のような感じになった.

open/
clickAndWaitlink=ログイン
typeid=usernameadmin
typeid=passwordadmin
clickAndWaitname=login
clickAndWaitlink=時間表
verifyTextcss=h2時間表
clickAndWaitlink=ログアウト

最後に、ログアウトしているので、テストを再度実行してみると、ブラウザが自動でhttp://localhost:3001にログインして、リンクをクリックして、表示を確認して、ログアウトする様子が見られる.

テストケースのエクスポート

macの場合、selenium IDEを選択した状態で、ファイルメニューから、テストケースをエクスポートでRspecやTestUnitへエクスポートできる.
ちなみに、上のテストをTestUnitでエクスポートした結果がこちら.

エクスポートしたファイルをpluginのtest/integrationにコピーして、
まず、クラス名とメソッド名を適当に決めて、このあたりを参考にして、${receiver}を@receiverに置き換えた.
そして、minitestを使うので、Test::Unit::TestCaseをfixtureを使えるActionController::TestCaseに適当に置き換えた.インテグレーションテストってこれでよかったっけ?
Test::Unit::TestCaseをActionDispatch::IntegrationTestに置き換えた.
Remineの場合は、Redmine::IntegrationTest

Redmineではもとから、selenium-webdriver gemを使っているので、そのままテストを実行してみるとfirefoxが自動起動してテストを始めてくれる.Firefoxを使っていると、突然落ちるので注意(> <).

できた.

integration_test

テスト用に3001ポートにサーバーを立てておかないとだめなところがちょっと.

Selenium Builder

SeleniumBuilder/se-builder
新しくSeleniumBuilderっていうのもできたらしい.
Selenium IDEとの比較は、Builder vs IDE 機能比較リスト

screenshot

ただ、残念ながら最新のFirefoxではエクスポートができなかった.
また、バージョンがあがったら試してみたい.

Selenium関連で最新版のFirefox 38.0.1で不具合がある件

バージョン2.3.3で、無事Rubyにエクスポートできることを確認した.

play with Capybara

よく考えたらCapybaraをつかうときは別にテストサーバーとか立ち上げないよな
って、考えてたら、やっぱりCapybaraがテスト用のサーバを立ち上げようとしてくれるらしい.

参考: Capybara.run_server=trueのときサーバーを立ち上げてくれるぽい.

ということは、Capybaraにテストサーバだけ用意させておいて、テストコードはSelenium IDEからエクスポートしたやつを使えばいいのでは!と思いついたけど、うまく動かない.
Capybaraの立ち上げるサーバのアドレスとポートがわかれば直接指定するんだけど…

わかったこと
js=trueのオプションは単にCapybara.current_driverを切り替えてるだけ.
How do you perform javascript tests with Minitest, Capybara, Selenium?

Capybara/Cucumberはport31337を使ってるぽい
portは、Capybara.server_port = 3001で設定できる
When running selenium with capybara/rails, how do I configure the server?

CapybaraのREADMEの日本語訳プロジェクトがあった.
本家のREADMEの更新にしたがってissueが登録される仕組み.
willnet/capybara-readme-ja

使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」

-Railsでの製作Tips, Redmineのプラグイン製作
-,

執筆者:

関連記事

Rails5でAjax処理をActionCableを使ってリアルタイム同期化

By: Mike Johnston – CC BY 2.0 目次1 はじめに2 サンプル掲示板3 ActionCableでリアルタイム化4 チャンネルを購読して、ストリームで分配する5 c …

Redmine2.5でプラグイン作成のチュートリアルやってみた 3〜設定

目次1 前回2 init.rb3 設定画面4 値の使い方5 情報 前回 Redmine2.5でプラグイン作成のチュートリアルやってみた Redmine2.5でプラグイン作成のチュートリアルやってみた …

Redmineプラグインで既存のモデルを修正する

By: Allen McGregor – CC BY 2.0 プラグイン インターナルを参考にした 目次1 Rubyのモジュール2 既存のモデルを拡張するRedmineプラグイン3 App …

railsのpathヘルパーでスラッシュの代わりにピリオドになっちゃうのでrails consoleでいろいろ試した

By: Nicolas Raymond – CC BY 2.0 目次1 問題2 解決3 pathとurlのヘルパーのあれこれ 問題 次のような環境で [crayon-5a2e6e30ea9 …

Redmineプラグインでマイページにオリジナルのブロックを追加する

目次1 追加方法は簡単2 翻訳3 参考になるプラグイン 追加方法は簡単 app/views/my/blocks以下にパーシャルを作っておいておけばOK www.redmine.org/projects