通过CLI执行testng.xml时出错:无法找到或加载主类org.testng.TestNG

在我进入它之前,我是selenium的新手,等等。 我查找了这个问题的所有答案,仍然无法解决问题。 我的%claspath%等等都是正确的。 jar文件位于正确的文件夹中。 我完全不知道为什么这不起作用。 我的猜测是,我正在做一些愚蠢的事情,专家会很快发现错误。

我能够在Eclipse中运行以下测试,它打开firefox并运行测试没有问题。 如果我从cmd或Jenkins运行测试,我会收到以下错误:错误: 无法找到或加载主类org.testng.TestNG


我用虚拟数据替换了下面的实际信息:

selenium类

package package1; import static org.junit.Assert.fail; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.NoAlertPresentException; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class login { private WebDriver driver; private String baseUrl; private boolean acceptNextAlert = true; private StringBuffer verificationErrors = new StringBuffer(); @Before public void setUp() throws Exception { System.setProperty("webdriver.gecko.driver","C:\\gecko\\geckodriver.exe"); driver = new FirefoxDriver(); baseUrl = "http://example.com"; driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); } @Test public void testLogin() throws Exception { driver.get(baseUrl + "index.php"); driver.findElement(By.id("email")).clear(); driver.findElement(By.id("email")).sendKeys("myemail@example.ie"); driver.findElement(By.id("password")).clear(); driver.findElement(By.id("password")).sendKeys("mypassword"); driver.findElement(By.xpath("//input[@value='Login »']")).click(); } @After public void tearDown() throws Exception { driver.quit(); String verificationErrorString = verificationErrors.toString(); if (!"".equals(verificationErrorString)) { fail(verificationErrorString); } } private boolean isElementPresent(By by) { try { driver.findElement(by); return true; } catch (NoSuchElementException e) { return false; } } private boolean isAlertPresent() { try { driver.switchTo().alert(); return true; } catch (NoAlertPresentException e) { return false; } } private String closeAlertAndGetItsText() { try { Alert alert = driver.switchTo().alert(); String alertText = alert.getText(); if (acceptNextAlert) { alert.accept(); } else { alert.dismiss(); } return alertText; } finally { acceptNextAlert = true; } } } 

项目结构 这是我的项目结构:

textng.xml

        

的run.bat

 cd C:\Users\keating99\workspace\FdimTests java -cp C:\Users\keating99\workspace\FdimTests\lib*;C:\Users\keating99\workspace\FdimTests\bin org.testng.TestNG testng.xml 

我确信我已经完美地设置了selenium测试。 我检查了类路径和项目路径,一切似乎都没问题。

任何帮助都将是一个很大的帮助。 再次提起所有其他答案,没有任何运气。 在此先感谢任何帮助人:)

UPDATE


 C:\Users\keating99\workspace\FdimTests>java org.testng.TestNG testng.xml Exception in thread "main" java.lang.NoClassDefFoundError: bsh/EvalError at org.testng.TestRunner.(TestRunner.java:99) at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:508) at org.testng.SuiteRunner.init(SuiteRunner.java:142) at org.testng.SuiteRunner.(SuiteRunner.java:106) at org.testng.TestNG.createSuiteRunner(TestNG.java:1116) at org.testng.TestNG.createSuiteRunners(TestNG.java:1103) at org.testng.TestNG.runSuitesLocally(TestNG.java:955) at org.testng.TestNG.run(TestNG.java:900) at org.testng.TestNG.privateMain(TestNG.java:1182) at org.testng.TestNG.main(TestNG.java:1146) Caused by: java.lang.ClassNotFoundException: bsh.EvalError 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) ... 10 more 

执行testng.xml的最简单方法如下:

  • IDE获取项目位置 ,即Eclipse ,通过Windows资源管理器转到项目位置并创建目录
  • 将所有库(Selenium jar,TestNG)转储到lib目录中。
  • Project Directory ,通过CLI提供以下类路径:

     C:\Users\keating99\workspace\FdimTests>set classpath=C:\Users\keating99\workspace\FdimTests\bin;C:\Users\keating99\workspace\FdimTests\lib\*; 
  • 现在,按如下方式执行testng.xml

     C:\Users\keating99\workspace\FdimTests>java org.testng.TestNG testng.xml 
  • 观察Testcase被执行。