创建新的WebDriver会导致StackOverflowError

Jos*_*ark 5 selenium webdriver selenium-webdriver

我只是想设置并能够从Selenium的网站运行示例.但是我把它缩小到导致StackOverflowError的FirefoxDriver构造函数.我使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

生成以下堆栈跟踪:

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)
  :
  :
Run Code Online (Sandbox Code Playgroud)

我正在使用selenium-java-2.22.0和随下载打包的json jar(json-20080701.jar)

另外值得注意的是,在运行新的FirefoxDriver时,Firefox会启动,您会看到一个新的标签页.使用InternetExplorerDriver,没有窗口打开,但它产生相同的堆栈跟踪,JSONObject无限循环.我在Windows 7上运行Firefox 12.0和IE9.

Pet*_*ček 7

欢迎来到JAR地狱

类路径中的某些JAR文件与Selenium依赖项冲突.即使你正在使用常春藤,它也有点奇怪.您的一个依赖项很可能包括其jar文件中的冲突类 - 或者您的依赖项需要同一个库的两个不同版本.

无论如何,为了将来的用户阅读本文 - 使用一些依赖管理器为你做罐子的艰苦工作.如果您有超过10个具有依赖项的项目,请不要尝试手动维护库 - 您很可能很快就会搞砸它们.这是对依赖解决方案的一个相当合理的解读,遵循那里的一些链接,不要偷懒.依赖管理者需要一些时间来掌握,他们是一个适合自己的世界.但他们帮了很多忙.

不要使用同一个库的多个版本.如果你使用多个库,其中两个使用相同的东西的不同版本...祝你好运!

除此之外...我们唯一的希望是将引入的Java模块系统Java 8 Java 9.

  • ps:问题的原因以及Ivy无法捕获问题并驱逐旧jar的原因是因为我们有另一个项目正在被拉入其中有一个旧版本的[pubnub](https:// github. com/pubnub/pubnub-api/tree/master/java)作为依赖项.事实证明,pubnub基本上只需要获取所有org.json代码并将其放入项目中.然后,由于pubnub出现在org.json之前的类路径中,该org.json被声明为selenium的依赖项,因此它被WebDriver构造函数拉出.我怀疑org.json库的旧版本中存在一个错误. (3认同)