おしりんブログ

新人PGおしりんの色々まとめるよブログ

JDK1.7+Gebが動かない

おしさしぶりです。
早いもので気づいたら3年目になっていました、おしりんです。

ここ3日間くらい、ひっさしぶりにはまりました。

そうです、Gebが動かないんです。
Spockは動くのにGebが動かないんです。

テスト開始してブラウザは立ち上がるものの、すぐに落ちるんです。
そしてひたすらVerifyErrorが出続ける・・

はまりにはまった結果、結局自分では解決できませんでしたが、先輩が解決してくれたのでご共有。

JDK1.7でGebが動かない!って人は参考にしてみてください。

・VerifyErrorがどうにも止まらない環境

Java 1.7
Gradle 2.4
Groovy 2.4.4

これでSpockは動くんです。

EclipseJUnitから動かしていたので、Eclipseの環境がおかしいのかなと思い、コマンドプロンプトから「gradle test --tests "テスト名"」で動かしても動かないんです。おかしい。

結局、何が原因だったのかっていうとGebを動かす環境のJavaのバージョンでした。

Gebの実行環境のJavaが1.8じゃないとうまく動かない。
(プロジェクトのコンパイラは1.7でおk)

EclipseからJUnitでGebのテストがこけるっていう人はぜひぜひ以下の設定でお試しあれ。

Preferences > Java > InstalledJREs

JDK1.8を追加

Preferences > Java > InstalledJREs > ExecutionEnvironment

JavaSE-1.7←クリック
Compatible JREsでJDK1.8を選択

これで動くはず!

まとめ!

最新(2016年9月)のGebで書いたテストを動かしたい時は、Javaが1.7以下だと動きません。
Javaのバージョンを8にしませう!

とりいそぎそんな感じでした。

以下、見飽きたエラーをぺたっとしておきます。
goとかtoとか遷移しようとすると落ちる。

java.lang.VerifyError: Bad <init> method call from inside of a branch
Exception Details:
  Location:
    geb/navigator/SearchContextBasedBasicLocator.<init>(Lorg/openqa/selenium/SearchContext;Lgeb/navigator/factory/NavigatorFactory;)V @91: invokespecial
  Reason:
    Error exists in the bytecode
  Bytecode:
    0000000: b800 1e4e 05bd 0004 5903 04bd 0004 5903
    0000010: 2b53 b800 2453 5904 2c53 5910 ff12 02b8
    0000020: 0028 2a5f ab00 0000 0000 005e 0000 0002
    0000030: a8a2 5e9a 0000 001c aca6 0f60 0000 003d
    0000040: 5f5a 5903 3212 2ab8 002e c000 2a5f 5904
    0000050: 3212 30b8 002e c000 305f 57b7 0033 a700
    0000060: 2e5f 5a59 0332 1235 b800 2ec0 0035 5f59
    0000070: 0432 1230 b800 2ec0 0030 5f57 b700 37a7
    0000080: 000d bb00 3959 123b b700 3ebf 57b1     
  Stackmap Table:
    full_frame(@64,{UninitializedThis,Object[#53],Object[#48],Object[#68]},{Object[#70],UninitializedThis})
    full_frame(@97,{UninitializedThis,Object[#53],Object[#48],Object[#68]},{Object[#70],UninitializedThis})
    full_frame(@130,{UninitializedThis,Object[#53],Object[#48],Object[#68]},{Object[#70],UninitializedThis})
    full_frame(@140,{Object[#2],Object[#53],Object[#48],Object[#68]},{Object[#70]})

    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585)
    at java.lang.Class.getDeclaredConstructors(Class.java:1906)
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49)
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36)
    at geb.navigator.factory.BrowserBackedNavigatorFactory.<init>(BrowserBackedNavigatorFactory.groovy:35)
    at geb.Configuration.createNavigatorFactory(Configuration.groovy:417)
    at geb.Browser.createNavigatorFactory(Browser.groovy:130)
    at geb.Browser.getNavigatorFactory(Browser.groovy:118)
    at geb.Page.init(Page.groovy:131)
    at geb.Browser.createPage(Browser.groovy:875)
    at geb.Browser.to(Browser.groovy:556)
    at geb.Browser.to(Browser.groovy:523)
    at geb.spock.GebSpec.methodMissing(GebSpec.groovy:56)