SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

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

Gebの基本的な使い方

 百聞は一見に如かず。ここからはGebでテストを書いていきたいと思います。

 前回のSelenide同様、日本Seleniumユーザーコミュニティが提供するテスト用サイトを題材とします。前回のSelenideのコードと見比べていただくと、両者の違いがわかっていただけると思いますので併せてご参照ください。

何をテストするか

 今回はサンプルとして、下記のテストを記述します。

  • 入力した予約内容とそれに基づく合計金額が、確認画面で正しく表示できるか。
  • 入力内容に不備がある場合にエラーメッセージを返すか。

利用環境

 このサンプルは、下記の環境で動作確認を行なっています。

環境 バージョン
OS macOS Sierra 10.12.2(16C68)
Oracle JDK 8u131
Apache Groovy 2.4.11
Gradle 4.0.2
Chrome Driver(server) 2.31
Selenium Chrome Driver 3.4.0
Geb 1.1.1

セットアップ

 最初はセットアップです。Gebを利用するにはいくつかの方法があります。

 MavenとGradleについては、公式サンプルプロジェクトがあります。それを利用すれば環境構築でつまづくことはないでしょう。

 筆者はGradleを利用してサンプルコードを記述しています。

GebConfig.groovyの作成

 サンプルプロジェクトを利用している場合は、src/test/resources内に、設定ファイルのGebConfig.groovyが存在していると思います。今回は一部それを変更する必要があります。必須の設定内容を説明します。

baseUrl

 Gebは、画面遷移する際に相対URLを指定することができます。その際にbaseUrlが必要になります。文字通り、相対URLで遷移する際のベース部分の定義になります。

 今回はテスト用アプリのトップページを指定します。

baseUrl = "http://example.selenium.jp/reserveApp_Renewal/"

reportsDir

 今回は、GebのGebReportingSpecというテストの基底クラスを利用しテストを記述していきます。GebReportingSpecは、テスト開始時、終了時、または任意のタイミングで画面キャプチャ(png、html)を自動取得します。そのため自動取得したレポートの出力先をreportsDirという変数で指定します。

reportsDir = "target/geb-reports"

その他の設定

 このサンプルでは厳密には不要ですが、知っておくと便利なものとして下記の設定があります。

Driverの実装

 Gebはマルチブラウザでの利用を想定していると書きました。そのため、設定に応じてどのブラウザのWebDriver実装クラスを利用するかをGebConfigで設定できるようになっています。

 具体的には、geb.envという環境変数にブロック名の値をセットすると、実行時にenvironmentsブロック内の同名ブロックに記述されたWebDriverインスタンス生成処理を利用できます。また、必要に応じてWebDriverインスタンスに追加のプロパティを与えることも可能です。

import org.openqa.selenium.htmlunit.HtmlUnitDriver

import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.remote.RemoteWebDriver

// デフォルトとして、特に何も指定していなければChromeDriverを利用する
driver = { new ChromeDriver() }

environments {
    // システム環境変数の 'geb.env' に 'remote' という値が設定されていたら、 remote Firefox driverを起動する
    remote {
        driver = {
            def remoteWebDriverServerUrl = new URL("http://example.com/webdriverserver")
            new RemoteWebDriver(remoteWebDriverServerUrl, DesiredCapabilities.firefox())
        }
    }
}

次のページ
ページオブジェクトの作成

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10456 2017/10/06 14:00

イベント

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

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

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

メールバックナンバー