java - 使用 SeleneseTestCase 运行 ANT 会导致 java.lang.NoClassDefFoundError

标签 java eclipse ant junit selenium

好的,所以我试图找出为什么 junit 在我的 ANT 构建过程中尝试运行扩展 SeleneseTestCase 的类时失败。我可以手动运行测试,没有问题。只有当我尝试使用 ANT 构建和运行它时,我才会遇到这个问题。

我在 Mac 上使用 Eclipse,其最新版本为:

selenium-java-client-driver-test.jar

selenium-java-client-driver.jar

selenium-server-standalone-2.0a7.jar 

这些在 ANT Global Settings 下的全局设置中引用,并在我的 SeleneseTestCase 类中正确导入(我可以毫无问题地手动运行 testSuite.RegressionTest 以及测试类本身)。所以我在某个地方缺少 ANT 和 Selenium 之间的链接。

任何帮助或进一步的尝试都将受到极大的欢迎。

如果你去过圣地亚哥(我请喝酒!!!非常认真:))

这是我的控制台输出:

[junit] Testsuite: testSuite.RegressionTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit] Null Test:  Caused an ERROR
[junit] null
[junit] java.lang.reflect.InvocationTargetException
[junit] Caused by: java.lang.NoClassDefFoundError: com/thoughtworks/selenium/SeleneseTestCase
[junit]     at java.lang.ClassLoader.defineClass1(Native Method)
[junit]     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
[junit]     at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
[junit]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
[junit]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
[junit]     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
[junit]     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
[junit]     at java.security.AccessController.doPrivileged(Native Method)
[junit]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[junit]     at testSuite.RegressionTest.suite(Unknown Source)
[junit] Caused by: java.lang.ClassNotFoundException: com.thoughtworks.selenium.SeleneseTestCase
[junit]     at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[junit]     at java.security.AccessController.doPrivileged(Native Method)
[junit]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[junit] Test testSuite.RegressionTest FAILED

更新:您可以看到 Selenium .jar 文件已加载...

[javac] [类文件的搜索路径:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar,

...[删除不相关的加载类]...

/Applications/eclipse/plugins/junit-4.8.2.jar、/Applications/eclipse/plugins/selenium-java-client-driver-tests.jar、/Applications/eclipse/plugins/selenium-java-client-driver.jar、/Applications/eclipse/plugins/selenium-server-standalone-2.0a7.jar]

...[删除不相关的加载类]...

最佳答案

看起来不像是 Selenium ,而是让你头疼的 Ant 。您使用什么版本的 ant?

这听起来绝对像是 ant 可能产生的类路径问题。我浪费了很多时间试图弄清楚为什么我的构建不起作用,结果却发现当我的任务运行时还有其他一些类路径变量被加载。当我明确调用新版本时,我什至不幸​​地加载了旧版本的 ant(隐藏在 Weblogic 深处)。那是我一生中浪费的 4 个小时......

我的建议是在 ant 脚本中创建一个类路径变量,明确命名要使用的 jar,并使用“-v”(用于详细)运行 ant 任务,以查看运行时实际加载的内容。

俗话说“如果它闻起来像鸭子,走路像鸭子,拉屎像鸭子,那么你可能就是一只鸭子”

关于java - 使用 SeleneseTestCase 运行 ANT 会导致 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4156399/

相关文章:

android - 如何使用 ant 脚本构建不同的 Android 应用程序

java - cassandra lucene - 如何获得更高的分数

java - gradle:没有源任务 ':processTestResources'和 ':processtResources'

java - 我在哪里可以找到以及如何修复我的 .classpath 文件

java - Ant <taskdef> 问题 - 未找到类名

java - ant 属性名称参数是预定义的吗?

java - Hibernate session.flush() --> 如何只更新脏对象而不是所有内容?

java - 只有在 mysql 运行后才在 windows 中启动时运行 java 程序?

java - HtmlUnit - 抓取数据

android - 如何在 Android 应用程序中删除/丢弃 "free"ram 使用