SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情

Groovy製のSeleniumラッパーライブラリ「Geb」で、可読性の高いテストを書いてみよう

  • X ポスト
  • このエントリーをはてなブックマークに追加

その他の便利な利用法

データ駆動テスト

 その他の便利な使い方として、データ駆動のテストを記述したいと思います。

 例えばログイン画面のエラーメッセージの表示をチェックしたい場合が典型的ですが、テストを行う際、利用するデータだけ異なるが、テストの実施内容は同じ、というケースがあります。

 そのような場合、テストする処理は共通化し、テストデータだけ変更できるようにすると便利です。

 Spockでは、@Unrollという機能が用意されており、それを利用することでデータだけの変更が容易に行えます。

    @Unroll
    def "入力内容に不備(#reason)があると、「#errorMessage」と表示する"() {
        given: "予約入力ページに遷移している"
        def 予約入力ページ = to 予約入力ページ

        when: "予約内容を入力して"
        予約入力ページ.予約内容の入力(reserveDate, reserveTerm, 名前)

        and: "利用規約に同意して次へボタンを押すと"
        予約入力ページ.利用規約に同意して次へ.click()

        then: "予約エラーページに遷移し"
        def 予約エラーページ = at 予約エラーページ

        and: "エラーメッセージが表示されている"
        予約エラーページ.エラーメッセージ == errorMessage

        where:
        reason              | reserveDate                 | reserveTerm | name      ||  errorMessage
        "宿泊日が3ヶ月以上先" | LocalDate.of(2017, 12, 25)   | 2           | "東京太郎" ||  "宿泊日には、3ヶ月以内のお日にちのみ指定できます。"
        "名前が空"           | LocalDate.of(2017, 12, 25)  | 2           | ""        ||  "お名前が指定されていません。"
    }

 テストケースに@Unrollというアノテーションを付加すると、whereブロックの中でテストデータを定義できます。

 データ定義にはテーブル記法が利用でき、パイプ文字(|)でデータの区切りを表します。慣習としてテストで利用するデータと、期待値の間はパイプ文字を二重にします(||)。

 上記のようにデータを定義すると、テストケース内だけでなく、テストメソッドでも定義されたデータを利用することができます。

 例えば、以下の記述について、

"入力内容に不備(#reason)があると、「#errorMessage」と表示する"

実際にテストが実行される際は、そのデータに応じて以下のような形に補完されテストレポートに出力されます。

"入力内容に不備(名前が空)があると、「お名前が指定されていません。」と表示する"

 このようにしておくと、テストが失敗した場合に、どのテストデータの時に失敗したのかがよりわかりやすくなります。

もっと詳しく知りたければ

 GebのAPIについてもっと詳しく知りたい方向けには、『The Book Of Geb』という公式ドキュメントが非常に丁寧に書かれています。英語ですがサンプルコードも豊富なので、ぜひ目を通して見てください。

 日本語の情報であれば、『Selenium実践入門』にGebの章があるので、そちらをお読みください。

最近のGebのアップデート

 いくつか直近でアップデートがあるので、メジャーなものを紹介します。

WebDriverのByをサポート

 下記のようにWebDriverのByメソッドをサポートするようになりました。

$(By.id("some-id"))

 Gebは長らくxpathを利用したエレメントの取得ができませんでしたが、このアップデートにより可能になっています。

$(By.xpath('//p[@class="xpath"]'))

reportOnTestFailureOnly

 GebReportingSpecを利用した際に、「テスト失敗時のみキャプチャを取得する」という設定が追加されています。この効能については後述します。

その他の便利系メソッドの追加

 Checkboxの複数アイテムの同時選択や、NavigationにisFocusedメソッドの追加、CSSセレクターのfilter()、not()、closest()といったメソッドののサポートなど、小さいですが便利な昨日追加がされています。詳しくは最近のリリース内容を確認してみてください。

次のページ
Gebのベストプラクティス&Tips

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情連載記事一覧

もっと読む

この記事の著者

高橋 陽太郎(株式会社リクルートテクノロジーズ)(タカハシ ヨウタロウ)

 リクルートテクノロジーズ ITエンジニアリング本部 HR領域エンジニアリング部 RJBグループ グループマネジャー ERPパッケージベンダー、勤怠SaaSエンジニアを経て、リクルートテクノロジーズ入社。現在はHR領域のエンジニアリンググループのマネージャーとして、タウンワークをはじめとしたサービスの開発リーダーを担っている。 コミュニティとして、TDDBCやSeleniumユーザーコミュニティの運営に携わっている。その傍ら、副業として企業へのSelenium導...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10456 2017/10/06 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング