我正在编写一个程序,使用selenide(4.4.x)和junit(4.12)自动化访问者注册。如果我在IDE中将它们作为JUnit测试运行,测试运行正常,但为了更方便的使用,我想从main / commandline运行它。
我设法让它与IntelliJ运行配置一起工作,但是当我从命令行尝试同样的事情时却没有。基本上,我有一个抽象类来启动和停止Selenium / ide WebDriver,一个包含实际保留逻辑的具体测试类(RegisterVisitorTest.java
),以及RunTest.java
和main
方法。请参阅下面的MWE(切断不相关的代码,因此可能无法执行)。
如果我用:
创建IntelliJ运行配置-Dselenide.browser=chrome -Dwebdriver.chrome.driver="C:\downloads\chromedriver.exe" -DlastName="Peeters" -DfirstDay="5-5-2017"
作为VM选项,然后执行得非常好并在RunTest.main"," RegisterVisitorTest"中打印"并且它为我填写表单。但是,如果我使用mvn install
创建一个jar并将其作为
java -Dselenide.browser=chrome -Dwebdriver.chrome.driver="C:\downloads\chromedriver.exe" -DlastName="Peeters" -DfirstDay="5-5-2017" -cp %junit_path%;target\name-of-jar.jar x.selenide.RunTest
其中`%junit_path%包含对junit.jar和hamcrest.jar的引用,它确实进入main并在RunTest.main"中打印"但它实际上并不运行测试。好消息是我也没有收到错误。
但是,当我从命令行直接将其作为JUnitCore运行符运行时使用:
java -Dselenide.browser=chrome -Dwebdriver.chrome.driver="C:\downloads\chromedriver.exe" -DlastName="Peeters" -DfirstDay="5-5-2017" -cp %junit_path%;target\name-of-jar.jar org.junit.runner.JUnitCore nl.ing.selenide.RegisterVisitorTest
我得到以下输出:
JUnit version 4.12
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/support/events/WebDriverEventListener
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.junit.internal.Classes.getClass(Classes.java:16)
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:100)
at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50)
at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72)
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.support.events.WebDriverEventListener
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 8 more
困扰我的是,当我从IDE运行它时它运行正常,但是当我从命令行运行main时它不会触发测试,并且当我直接运行测试时它会失败。在我的Maven项目中,我确实有许多红线,但这在大多数情况下似乎并不重要......
无论如何,这似乎归结为上面提到的WebDriverEventListener,但如果我尝试添加WebDriverEventListener,它显然可以找到依赖项并自动添加正确的import语句,但如果我再做一次{{{ 1}}。
我错过了什么吗?
编辑:虽然找不到'班级'在其他SO问题中找到它,它不是所提到的hadoop问题的重复,因为我有正确的环境变量集。
我能够运行其他JAR,而不是这个。
使用Maven程序集插件解决所有依赖项。
MWE(尝试):
mvn install
答案 0 :(得分:1)
这个例外很简单:类路径缺少某些东西。 java无法找到org/openqa/selenium...
类。
你所有的设置都提到junit,hamcrest,......但不是selenium。
长话短说:可能你的IDE在类路径中添加了一个selenium jar而你没有注意到。但是当你在命令行上运行时,你需要提供所有所需的元素。硒缺失了。也许你的拥有类也可能。