Error executing testng.xml through CLI : Could not

2019-01-15 21:00发布

问题:

Before I get into it, I'm a newbie with selenium and so on. I have looked up all the answers to this issue and still haven't been able to fix the problem. My %claspath% and so on are all correct. The jar files are in the correct folders and such. I'm totally lost to why this isn't working. My guess is that I'm doing something silly and an expert would spot the error quickly.

I am able to run the following test within Eclipse, it opens firefox and runs the test with no issues. If I run the test from cmd or Jenkins I get the following error: Error: Could not find or load main class org.testng.TestNG


I have replaced actual information below with dummy data:

Selenium class

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;
    }
  }
}

Project structre

textng.xml

<suite name="SampleSuite">

    <test name="LearningJenkins">

        <classes>

            <class name="package1.login"></class>

        </classes>

    </test>

</suite>

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

I am certain I have set up the selenium test perfectly. I have checked the class path and project path and all seems to be OK.

Any help at all would be a great help. Again have have looked up all the other answers with no luck whatsoever. Thanks in advance for any help people :)

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.<init>(TestRunner.java:99)
        at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:508)
        at org.testng.SuiteRunner.init(SuiteRunner.java:142)
        at org.testng.SuiteRunner.<init>(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

回答1:

The simplest way to execute your testng.xml is as follows :

  • Get your Project Location from your IDE i.e. Eclipse, through Windows Explorer go to the Project Location and create a directory lib .
  • Dump all the libraries (Selenium jars, TestNG) in the lib directory.
  • From Project Directory, through CLI provide the following classpath:

    C:\Users\keating99\workspace\FdimTests>set classpath=C:\Users\keating99\workspace\FdimTests\bin;C:\Users\keating99\workspace\FdimTests\lib\*;
    
  • Now, execute testng.xml as follows :

    C:\Users\keating99\workspace\FdimTests>java org.testng.TestNG testng.xml
    
  • Observe the Testcase gets executed.