5

セットアップを取得して、 SeleniumのWebサイトからサンプルを実行できるようにしようとしています。ただし、FirefoxDriverコンストラクターに絞り込んだため、StackOverflowErrorが発生しました。InternetExplorerDriverでも同じ動作が得られますが、HtmlUnitDriverでは動作しません。

次のコード

import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WebDriverTest {

    @Test
    public void test() {
        WebDriver driver = new FirefoxDriver();
    }
}

次のスタックトレースを生成します。

java.lang.StackOverflowError
  at java.lang.Exception.<init>(Unknown Source)
  at java.lang.reflect.InvocationTargetException.<init>(Unknown Source)
  at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at org.json.JSONObject.populateMap(JSONObject.java:937)
  at org.json.JSONObject.<init>(JSONObject.java:272)
  at org.json.JSONObject.wrap(JSONObject.java:1539)
  at org.json.JSONObject.populateMap(JSONObject.java:939)
  at org.json.JSONObject.<init>(JSONObject.java:272)
  at org.json.JSONObject.wrap(JSONObject.java:1539)
  at org.json.JSONObject.populateMap(JSONObject.java:939)
  at org.json.JSONObject.<init>(JSONObject.java:272)
  at org.json.JSONObject.wrap(JSONObject.java:1539)
  at org.json.JSONObject.populateMap(JSONObject.java:939)
  at org.json.JSONObject.<init>(JSONObject.java:272)
  at org.json.JSONObject.wrap(JSONObject.java:1539)
  at org.json.JSONObject.populateMap(JSONObject.java:939)
  at org.json.JSONObject.<init>(JSONObject.java:272)
  at org.json.JSONObject.wrap(JSONObject.java:1539)
  at org.json.JSONObject.populateMap(JSONObject.java:939)
  at org.json.JSONObject.<init>(JSONObject.java:272)
  :
  :

私はselenium-java-2.22.0とダウンロードでパッケージ化されたjsonjar(json-20080701.jar)を使用しています

また、新しいFirefoxDriverを実行すると、Firefoxが起動し、新しいタブページが表示されます。InternetExplorerDriverを使用すると、ウィンドウは開きませんが、JSONObjectが無限にループする同じスタックトレースが生成されます。Windows7でFirefox12.0とIE9を実行しています。

4

3 に答える 3

7

JAR地獄へようこそ

クラスパス内の一部のJARファイルがSeleniumの依存関係と競合しています。アイビーを使っていても、それが起こったのはちょっと不思議です。依存関係の1つに、jarファイル内の競合するクラスが含まれている可能性があります。または、依存関係に同じライブラリの2つの異なるバージョンが必要です。

とにかく、これを読む将来のユーザーのために-依存関係マネージャーを使用して、jarを使用してハードワークを実行してください。依存関係のあるプロジェクトが10を超える場合は、ライブラリを手動で保守しようとしないでください。すぐに失敗する可能性があります。これは依存関係の解決策についてのかなり合理的な読み物です。そこにあるリンクのいくつかをたどってください。怠惰にならないでください。依存関係マネージャーは習得するのに少し時間がかかります、彼らは彼ら自身のための世界です。しかし、彼らは大いに役立ちます。

同じライブラリの複数のバージョンを使用しないでください。また、複数のライブラリを使用していて、そのうちの2つが同じものの異なるバージョンを使用している場合は、幸運を祈ります。

それ以外は...私たちの唯一の希望は、で紹介されるJavaモジュールシステムです。Java 8Java9。

于 2012-05-31T21:40:16.810 に答える
1

テスト プロジェクトの org.json クラスが、WebDriver が必要とするバージョン (20080701) よりも古いバージョンの org.json クラスパスのどこかにある場合に、この問題が発生することを確認できます。

PS: FTR http://code.google.com/p/selenium/issues/detail?id=4123を「誤って」開いてしまったので、これが WEBDRIVER の問題ではないことを明確にするために。

于 2012-06-21T16:43:47.497 に答える
0

クラスパス上のjsonライブラリを、/Selenium-x.xx/lib/json-20080701.jarにあるセレンに付属しているライブラリに置き換えます。

于 2013-01-16T23:13:53.880 に答える