Spring Boot + npm + Geb で入力フォームを作ってテストする ( その79 )( webdriver-binaries-gradle-plugin を利用して WebDriver の個別ダウンロードを不要にする )
概要
記事一覧はこちらです。
- 今回の手順で確認できるのは以下の内容です。
参照したサイト・書籍
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-94f01c998f18AutomationSchool/geb-and-spock-automation-examples
https://github.com/AutomationSchool/geb-and-spock-automation-exampleserdi/webdriver-binaries-gradle-plugin
https://github.com/erdi/webdriver-binaries-gradle-pluginChromeDriver - WebDriver for Chrome
http://chromedriver.chromium.org/downloadsmozilla/geckodriver
https://github.com/mozilla/geckodriver
目次
手順
まずは現在の状況を確認する
clean タスク実行 → Rebuild Project 実行 → build タスク実行は問題なく BUILD SUCCESSFUL のメッセージが出力されて成功します。
また Chrome のバージョンが 73.0.3683.103 で、
Firefox のバージョンが 66.0.3 ですが、
gebTest タスクを実行すると chromeTest タスクは成功しますが firefoxTest タスクは全てのテストが失敗します。ダウンロードしている geckodriver が今の Firefox に合っていないようです。
(.....途中省略.....)
build.gradle を変更する
geb-and-spock-automation-examples/twitter-app-ui-automation/build.gradle と erdi/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) } } }
D:/geckodriver
の下に0.24.0
というディレクトリを作成した後、https://github.com/mozilla/geckodriver/releases/tag/v0.24.0 から geckodriver-v0.24.0-win64.zip をダウンロード・解凍して geckodriver.exe を配置します。D:/chromedriver
の下に73.0.3683.68
というディレクトリを作成した後、http://chromedriver.chromium.org/downloads から ChromeDriver 73.0.3683.68 のファイル(chromedriver_win32.zip)をダウンロード・解凍して chromedriver.exe を配置します。- 以下の2行をコメントアウトします。
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")
※IntelliJ IDEA から実行する時には個別の WebDriver と System.setProperty("webdriver.~.driver", ...)
の設定が必要なので、削除はせずにコメントアウトだけしておきます。
動作確認
gebTest タスクを実行してみると今度は chromeTest, firefoxTest のどちらもエラーが出なくなりました。
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/
のディレクトリを削除するという記述を削除した。