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を利用するにはいくつかの方法があります。
- GebのJARをクラスパスに追加する
- Mavenを利用する
- Gradleを利用する
MavenとGradleについては、公式サンプルプロジェクトがあります。それを利用すれば環境構築でつまづくことはないでしょう。
筆者はGradleを利用してサンプルコードを記述しています。
GebConfig.groovyの作成
サンプルプロジェクトを利用している場合は、src/test/resources内に、設定ファイルのGebConfig.groovyが存在していると思います。今回は一部それを変更する必要があります。必須の設定内容を説明します。
baseUrl
- 参考:2.2.1. The base URL(The Book Of Geb)
Gebは、画面遷移する際に相対URLを指定することができます。その際にbaseUrlが必要になります。文字通り、相対URLで遷移する際のベース部分の定義になります。
今回はテスト用アプリのトップページを指定します。
baseUrl = "http://example.selenium.jp/reserveApp_Renewal/"
reportsDir
- 参考:7.2.10. Reports directory(The Book Of Geb)
今回は、GebのGebReportingSpecというテストの基底クラスを利用しテストを記述していきます。GebReportingSpecは、テスト開始時、終了時、または任意のタイミングで画面キャプチャ(png、html)を自動取得します。そのため自動取得したレポートの出力先をreportsDirという変数で指定します。
reportsDir = "target/geb-reports"
その他の設定
このサンプルでは厳密には不要ですが、知っておくと便利なものとして下記の設定があります。
Driverの実装
- 参考:7.2.1. Driver implementation(The Book Of Geb)
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())
}
}
}
