5

我只是想进行设置并能够从 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();
    }
}

产生以下堆栈跟踪:

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。

4

3 回答 3

7

欢迎来到JAR 地狱

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

无论如何,对于未来阅读本文的用户 - 使用一些依赖管理器为您使用 jars 进行艰苦的工作。如果您有超过 10 个具有依赖关系的项目,请不要尝试手动维护您的库 - 您很可能很快就会搞砸。这是对依赖解决方案的相当合理的阅读,请点击那里的一些链接,不要偷懒。依赖管理器需要一些时间来掌握,他们是自己的世界。但他们帮助很大。

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

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

于 2012-05-31T21:40:16.810 回答
1

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

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

于 2012-06-21T16:43:47.497 回答
0

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

于 2013-01-16T23:13:53.880 回答