LoginSignup
1
1

More than 5 years have passed since last update.

Selenium Java + HtmlUnit Driver トラブルシューティング

Posted at

Selenium JavaHtmlUnit Driver を使ってヘッドレスなUIテストを実装した際にはまったポイントをまとめています。

検証したバージョン

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.8.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>htmlunit-driver</artifactId>
    <version>2.29.0</version>
</dependency>

(1) 要素のクリックができない

現象

要素をクリックするために WebElement#click を呼び出すと、標準出力に Exception invoking getScreenY という文字列が出力され、クリック処理が実行されない。

原因・解決策

実際には以下の例外が発生して、それがキャッチされて上記の文字列が出力されている。

java.lang.NoSuchMethodError: org.apache.commons.lang3.StringUtils.countMatches(Ljava/lang/CharSequence;C)I

この例外はCommons Langのバージョンが古いため、HtmlUnitが利用しているメソッドが存在しないことで発生している。

解決するには、mvn dependency:tree もしくは依存関係のドキュメントを参照して、HtmlUnitが依存するCommons Langのバージョンに合わせればよい。(HtmlUnit2.29の場合は Commons Lang 3.7)

(2) NoClassDefFoundErrorが発生する

現象

テストを実行すると以下のスタックトレースが出力される。

java.lang.NoClassDefFoundError: org/apache/http/cookie/CookieSpecProvider
    at com.gargoylesoftware.htmlunit.WebClient.createWebConnection(WebClient.java:2060)
    ...
原因・解決策

この問題もHtmlUnitが依存するHttpClientのバージョンが古いことが原因のため、バージョンを合わせればよい。(HtmlUnit 2.29 の場合はHttpClientLang 4.5.3)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1