かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その79 )( webdriver-binaries-gradle-plugin を利用して WebDriver の個別ダウンロードを不要にする )

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その78 )( PMD を 6.5.0 → 6.6.0 へバージョンアップする+gradle-processes を導入する ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Selenium WebDriver の実行ファイル(exe)を今は個別にダウンロードしたものを D:/geckodriver/0.19.0/geckodriver.exeD:/chromedriver/2.40/chromedriver.exe に配置して利用していますが、webdriver-binaries-gradle-plugin という Gradle の Plugin を利用することでダウンロードしなくてもよい方法を見つけたので、その方法に切り替えます。
    • ついでに今回から何回かに分けて使用しているフレームワークやライブラリを最新版にバージョンアップします。

参照したサイト・書籍

  1. Learn Geb + Spock : The best of breed solution for all your UI automation needs
    https://medium.com/automationschool/geb-spock-the-best-of-breed-solution-for-all-your-ui-automation-needs-94f01c998f18

  2. AutomationSchool/geb-and-spock-automation-examples
    https://github.com/AutomationSchool/geb-and-spock-automation-examples

  3. erdi/webdriver-binaries-gradle-plugin
    https://github.com/erdi/webdriver-binaries-gradle-plugin

  4. ChromeDriver - WebDriver for Chrome
    http://chromedriver.chromium.org/downloads

  5. mozilla/geckodriver
    https://github.com/mozilla/geckodriver

目次

  1. まずは現在の状況を確認する
  2. build.gradle を変更する
  3. GebConfig.groovy を変更する
  4. 動作確認

手順

まずは現在の状況を確認する

clean タスク実行 → Rebuild Project 実行 → build タスク実行は問題なく BUILD SUCCESSFUL のメッセージが出力されて成功します。

f:id:ksby:20190412055738p:plain

また Chrome のバージョンが 73.0.3683.103 で、

f:id:ksby:20190412060020p:plain

Firefox のバージョンが 66.0.3 ですが、

f:id:ksby:20190412060205p:plain

gebTest タスクを実行すると chromeTest タスクは成功しますが firefoxTest タスクは全てのテストが失敗します。ダウンロードしている geckodriver が今の Firefox に合っていないようです。

f:id:ksby:20190412060810p:plain (.....途中省略.....) f:id:ksby:20190412060904p:plain

build.gradle を変更する

geb-and-spock-automation-examples/twitter-app-ui-automation/build.gradleerdi/webdriver-binaries-gradle-plugin を参考にして build.gradle を以下のように変更します。

plugins {
    ..........
    id "com.energizedwork.webdriver-binaries" version "1.4"
}

..........

webdriverBinaries {
    chromedriver "73.0.3683.68"
    geckodriver "0.24.0"
}
def drivers = ["chrome", "firefox"]
drivers.each { driver ->
    task "${driver}Test"(type: Test) {
        // 前回実行時以降に何も更新されていなくても必ず実行する
        outputs.upToDateWhen { false }
        systemProperty "geb.env", driver
        exclude "ksbysample/**"
        dependsOn startServer
        finalizedBy stopServer
    }
}
task gebTest {
    dependsOn drivers.collect { tasks["${it}Test"] }
    enabled = false
}
  • plugins block に id "com.energizedwork.webdriver-binaries" version "1.4" を追加します。
  • webdriverBinaries { ... } を追加します。chromedriver のバージョンは ChromeDriver - WebDriver for Chrome で、geckodriver のバージョンは mozilla/geckodriver で確認して記述します。

変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

GebConfig.groovy を変更する

import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.firefox.FirefoxOptions

//System.setProperty("webdriver.gecko.driver", "D:/geckodriver/0.24.0/geckodriver.bat")
//System.setProperty("webdriver.chrome.driver", "D:/chromedriver/73.0.3683.68/chromedriver.exe")
driver = {
    FirefoxOptions firefoxOptions = new FirefoxOptions()
    firefoxOptions.setHeadless(true)
    new FirefoxDriver(firefoxOptions)
}
baseUrl = "http://localhost:8080"
waiting {
    timeout = 15
}

environments {

    chrome {
        driver = {
            ChromeOptions chromeOptions = new ChromeOptions()
            chromeOptions.setHeadless(true)
            new ChromeDriver(chromeOptions)
        }
    }

    firefox {
        driver = {
            FirefoxOptions firefoxOptions = new FirefoxOptions()
            firefoxOptions.setHeadless(true)
            new FirefoxDriver(firefoxOptions)
        }
    }

}

IntelliJ IDEA から実行する時には個別の WebDriver と System.setProperty("webdriver.~.driver", ...) の設定が必要なので、削除はせずにコメントアウトだけしておきます。

動作確認

gebTest タスクを実行してみると今度は chromeTest, firefoxTest のどちらもエラーが出なくなりました。

f:id:ksby:20190412063541p:plain

GebConfig.groovy で setHeadless(true) の行をコメントアウトしてブラウザを表示して動作も見てみましたが、問題ないようです。

WebDriver のファイルを個別にダウンロードしてプロジェクトとは別のディレクトリに配置するのは避けたいと思っていたので、これは便利ですね!

履歴

2019/04/12
初版発行。
2019/04/13
* 最新の geckodriver、chromedriver をダウンロードしてディレクトリに配置する記述を追加した。
* System.setProperty("webdriver.gecko.driver", ...)System.setProperty("webdriver.chrome.driver", ...) の記述を削除するのではなくコメントアウトするよう修正した(削除すると IntelliJ IDEA からテストを実行できなくなるため)。
* D:/geckodriver/D:/chromedriver/ディレクトリを削除するという記述を削除した。