Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away