Page Object PatternをベースにTestCafeでE2Eテストを作ってみた
以前のエントリでKotlinでSelenideを使ったE2Eテストを作ったときもPage Object Patternを利用して見通しの良いテストコードが書けました。TestCafeでも同様にPage Object Patternを利用することが推奨されています。今回はTestCafeでもPage Object Patternを利用してテストを書いてみました。
何をテストするか
次のサイトのログイン認証をテストします。FRESH!(フレッシュ) - 生放送がログイン不要・高画質で見放題テスト内容としては次のとおりです。
- 認証画面のURLを開く
- IDとパスワードを入力する
- ログインボタンをクリックする
- ログインが完了するとHome画面にリダイレクトされるので正しくリダイレクトされているか
- ログインが完了するとヘッダーモジュールにアカウント名が表示されてるので正しく表示されているか
テストコードのフォルダ構成
プロジェクトのフォルダ構成は次のように役割ごとに整理しました。
|
|
- **features**にはスペックコードをまとめます。
- **operators**にはPageオブジェクトから画面要素を参照して**ログインボタンをクリックする**などのオペレーションをまとめます。
- **pages**には画面の要素を参照できるようなPageオブジェクトを画面ごとにまとめます。今回は認証画面とHome画面をPageクラスにしました。
- **support**にはスペックコードでテストを進めるときに画面キャプチャを撮るなどのユーティリティ機能をまとめます。
次からはTestCafeのAPIを利用して記述したコード例を紹介します。
Pageクラス
TestCafeのAPIを利用して認証画面のPageクラスを作ります。
|
|
- 認証画面のURLを変数に定義する。
- テストに必要な画面要素は**Selector**を利用して定義する。
- _idInput_はログインID、_pwInput_はパスワードの入力フィールドです。
- _submitBtn_はログインボタンです。
これで認証画面の要素をまとめたAuthPageクラスができあがりました。
Operatorクラス
TestCafeのAPIを利用してOperatorクラスを作ります。
今回は認証画面でログイン認証する必要があるのでログイン操作をまとめます。
|
|
- _constructor ()_でAuthPageクラスからPageオブジェクトを生成します。
- _authorize(id, password)_では認証画面を開きIDの入力とパスワードの入力を行い最後にログインボタンをクリックしています。_typeText_と_click_で入力とクリックの操作ができます。
- _t_はTestCafeのTestConrollerオブジェクトです。async-awaitとimportをすることでテスト実行時のTestConrollerオブジェクトと同期できます。0.13.0のリリース(Using test controller outside of test code (#1166))でTestConrollerをテストコード外でも参照することができるようになりました。(いいね!)
Supportクラス
TestCafeのAPIを利用してのSupportクラスを作ります。
今回は画面キャプチャを撮るユーティリティクラスを作りました。
|
|
- TestControllerには画面キャプチャを撮るメソッドが用意されています。
- 取った画像を配置するフォルダもテスト実行時のオプションで指定できます。
- 保存される画像のサイズは表示したブラウザのサイズになり縦長の画面の場合には画面全体を撮ることはできないようです。
Specクラス
TestCafeのAPIを利用してのSpecクラスを作ります。
このクラスでテスト内容をまとめていきます。
|
|
- _fixture_はテストをカテゴライズする機能でテスト実行時にfixtures単位でテストを実行するオプションがあります。
- _test_ではテストのタイトルとテストコードを記述していきます。
- Operatorクラスでまとめた認証画面でログインする_authorize(userId, password)_を呼びだしてログインを実行しています。
- ログイン後にURLが切り替わっているかdocURI変数にURLを入れてチェックしています。
- 最後にexpectを利用してヘッダーモジュールにアカウント名が表示されているかをチェックしています。
まとめ
- Page Object Design PatternベースにTestCafeでテストを書いてみました。新しいAPIということもあり画面をオブジェクト化しやすい機能が揃っている印象です。
- テストコードから画面要素と画面操作を分離してコード化することができました。
- 以前のエントリではChatOpsとの連携も試してみました。E2Eテストを快適に実施と運用していくことを考えるとTestCafeの採用を検討していきたい☕️
ソースを公開しています
関連エントリ
WebDriver不要のTestCafeを使ったE2EテストをChatOpsに導入してみた - 平日インプット週末アウトプットぶろぐ