Ruby
RSpec
Selenium
Capybara
site_prism

SitePrismを使ったページオブジェクトデザインパターンによるテストのサンプルを作りました

ページオブジェクトデザインパターンとは

ページオブジェクトデザインパターンとはWebアプリケーションのUIのテスト手法の1つです。

テスト対象システムの画面情報をページオブジェクトクラスと呼ばれる共通化クラスに集約し、
画面の変更に伴うスクリプトの修正コストを減らすテストスクリプトのデザインパターンです。
テストスクリプトの中でページを操作または情報の取得する際は、ページオブジェクトを介して行います。

これにより冗長なテストコードを減らしたり、変更に強いテストコードにすることが可能です。

ページオブジェクトパターンのメソッドの戻り値に関する作法のバリエーション

今回作成したサンプルコードは メソッドが他のPageObjectを返さない を採用しています。

  • メソッドが他のPageObjectを返さない
    • 同じアクションを単一メソッドにできるが、ページ遷移の結果を呼び出し元に書く必要がある
  • メソッドが他のPageObjectを返す
    • ページ遷移を伴わない場合は自身のPageObjectを返す (SeleniumHQ公式Wikiの場合)
      • 一貫してアクションをメソッドチェーンで書くことができる
    • ページ遷移を伴わず、文字列等を返さない場合はvoidを返す (Selenium実践入門の場合)
      • ページ遷移を伴うアクションをメソッドチェーンで書くことができる

SitePrismを使ったページオブジェクトデザインパターンによるテスト

テスト用サイト

日本Seleniumユーザーコミュニティのテスト用サイトを使用します。

テストで使用するライブラリ

ライブラリ 概要 ドキュメント
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