创建新的WebDriver会导致StackOverflowError

时间:2012-05-31 20:40:34

标签: selenium webdriver selenium-webdriver

我只是想设置并能够从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。

3 个答案:

答案 0 :(得分:7)

欢迎来到JAR hell

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

无论如何,为了将来的用户阅读本文 - 使用一些依赖管理器为你做罐子的艰苦工作。如果您有超过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中引入。

答案 1 :(得分:1)

我们也正在讨论这个问题,如果你的测试项目的org.json类比其类似路径上的某个WebDriver需要的其他/旧版本(20080701)那样,我可以确认你会遇到这个。

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

答案 2 :(得分:0)

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