【问题标题】:Creating a new WebDriver causes StackOverflowError创建新的 WebDriver 会导致 StackOverflowError
【发布时间】:2012-05-31 20:40:34
【问题描述】:

我只是想进行设置并能够从 Selenium 的网站上运行 example。但是,我已将其范围缩小到导致 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();
    }
}

产生以下堆栈跟踪:

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 和下载时打包的 json jar(即 json-20080701.jar)

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

【问题讨论】:

  • 哇。就像调试工具一样,尝试使用-Xss1m 或更多(32 位 JVM 通常默认为 512 kB)运行它,以查看递归是否真的是无限的。您的 Java JDK 和/或 JRE 版本是什么?您确定项目的类路径中没有冲突的 jar 吗?
  • 我已经添加了参数-Xms1024m。根据您的建议,我只是擦除了包含我的依赖项的文件夹,从我的 ivy.xml 文件中删除了除 selenium 及其依赖项之外的所有依赖项条目,然后取消了我的依赖项。 Firefox 现在可以工作了,我从 IE 中得到一个不同的错误。所以现在我可以很开心地确定哪些依赖项是冲突的。如果您添加答案,我会接受。

标签: selenium webdriver selenium-webdriver


【解决方案1】:

欢迎来到JAR hell

类路径中的一些 JAR 文件与 Selenium 依赖项冲突。即使您使用的是常春藤,它也发生了,这有点奇怪。您的依赖项之一很可能在其 jar 文件中包含冲突的类 - 或者您的依赖项需要同一个库的两个不同版本。

无论如何,对于未来阅读本文的用户 - 使用一些依赖管理器为您使用 jars 进行艰苦的工作。如果您有超过 10 个具有依赖关系的项目,请不要尝试手动维护您的库 - 您很可能很快就会搞砸。 This is quite a reasonable read on dependency solutions, follow some of the links there, don't be lazy. 依赖管理器需要一些时间来掌握,他们是自己的世界。但他们帮助很大。

不要使用同一个库的多个版本。如果您使用多个库,其中两个库使用同一事物的不同版本……祝您好运!

除此之外......我们唯一的希望是Java Module System,它将在 Java 8 Java 9 中引入。

【讨论】:

  • ps:问题的原因以及 Ivy 无法发现问题并驱逐旧 jar 的原因是因为我们有另一个项目正在被拉入,它有一个旧版本的 @987654324 @ 作为依赖项。事实证明,pubnub 基本上只是将所有 org.json 代码放入他们的项目中。然后,由于 pubnub 出现在声明为 selenium 依赖项的 org.json 之前的类路径中,它被 WebDriver 构造函数拉取。我怀疑旧版本的 org.json 库中存在错误。
  • 有时让我感到奇怪的是,Sun 允许在他们的工程师通常考虑每个小漏洞时出现这个重大问题。我非常期待 Java 8。
  • FTR,我刚刚在我的类路径中使用 Riak 1.0.5 + Selenium 遇到了这个问题。原来 Riak 客户端在 jar 中包含 org.json。
【解决方案2】:

我们也遇到了这个问题,如果您的测试项目的 org.json 类在其类路径中的某个位置有 WebDriver 需要的其他/旧版本 (20080701),我可以确认您会遇到这种情况。

PS:FTR 我“错误地”打开了http://code.google.com/p/selenium/issues/detail?id=4123,所以只是为了澄清这不是 WEBDRIVER 问题。

【讨论】:

    【解决方案3】:

    将类路径中的 json 库替换为 selenium 附带的库,该库位于 /Selenium-x.xx/lib/json-20080701.jar 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多