ページオブジェクトデザインパターンとは
ページオブジェクトデザインパターンとはWebアプリケーションのUIのテスト手法の1つです。
テスト対象システムの画面情報をページオブジェクトクラスと呼ばれる共通化クラスに集約し、
画面の変更に伴うスクリプトの修正コストを減らすテストスクリプトのデザインパターンです。
テストスクリプトの中でページを操作または情報の取得する際は、ページオブジェクトを介して行います。
これにより冗長なテストコードを減らしたり、変更に強いテストコードにすることが可能です。
ページオブジェクトパターンのメソッドの戻り値に関する作法のバリエーション
今回作成したサンプルコードは メソッドが他のPageObjectを返さない を採用しています。
- メソッドが他のPageObjectを返さない
- 同じアクションを単一メソッドにできるが、ページ遷移の結果を呼び出し元に書く必要がある
- メソッドが他のPageObjectを返す
- ページ遷移を伴わない場合は自身のPageObjectを返す (SeleniumHQ公式Wikiの場合)
- 一貫してアクションをメソッドチェーンで書くことができる
- ページ遷移を伴わず、文字列等を返さない場合はvoidを返す (Selenium実践入門の場合)
- ページ遷移を伴うアクションをメソッドチェーンで書くことができる
- ページ遷移を伴わない場合は自身のPageObjectを返す (SeleniumHQ公式Wikiの場合)
SitePrismを使ったページオブジェクトデザインパターンによるテスト
テスト用サイト
日本Seleniumユーザーコミュニティのテスト用サイトを使用します。
- ホテル宿泊予約サイト : http://example.selenium.jp/reserveApp_Renewal/
- 詳細はこちら
テストで使用するライブラリ
ライブラリ | 概要 | ドキュメント |
---|---|---|
RSpec | Rubyのテストフレームワーク | http://rspec.info/documentation/ https://relishapp.com/rspec |
Selenium WebDriver | Webアプリケーションのテスト自動化をサポートするツール | https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings http://seleniumhq.github.io/selenium/docs/api/rb/index.html |
Capybara | WebアプリケーションのE2Eテストフレームワーク | http://www.rubydoc.info/github/teamcapybara/capybara/master |
SitePrism | ページオブジェクトデザインパターンのテストの作成をサポートする | http://www.rubydoc.info/gems/site_prism/frames |
サンプルコード
https://github.com/RustyNail/page_object_pattern_demo (Created by @oh_rusty_nail , @kou029w )
- Dockerを使用しているため、ローカルにブラウザやドライバを自前でインストールする必要がありません
- Docker / Docker Composeのインストール方法はREADMEに記載しています
- テストを実行する上で必要なため、インストールをお願いします
テストで使用するブラウザ
ブラウザはHeadless Chromeを使用します。
テストの実行方法
Docker環境でテストを実行します。
- ビルド
docker-compose build
- テスト実行
docker-compose run --rm test