java.lang.NoClassDefFoundError:org / apache / commons / exec / Executor

时间:2018-04-03 04:20:00

标签: java selenium

我正在尝试执行以下代码,但在运行时收到错误“java.lang.NoClassDefFoundError:org / apache / commons / exec / Executor”。我也添加了“Common-Exec jar”文件,但它无法正常工作。 我需要添加任何其他jar文件吗?

package cross_browser;
import org.testng.annotations.Test;
import org.testng.annotations.Parameters;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

public class NewTest {
    WebDriver driver;
    String url;

  @BeforeClass
  @Parameters({"browser"})
  public void beforeTest(String browser) {
      url = "https://www.facebook.com";
      if (browser.equalsIgnoreCase("chrome"))
      {
          System.setProperty("webdriver.gecko.driver", "C:\\Users\\Prateek\\Desktop\\Drivers\\geckodriver.exe");
          driver = new FirefoxDriver();
      }
      if (browser.equalsIgnoreCase("firefox"))
      {
          System.setProperty("webdriver.chrome.driver", "C:\\Users\\Prateek\\Desktop\\Drivers\\chromedriver.exe");
          driver = new ChromeDriver();
      }
      driver.manage().window().maximize();    
  }

  @Test
  public void Test() {
      driver.get(url);
      driver.findElement(By.id("email")).sendKeys("Prateek");
      driver.findElement(By.id("password")).sendKeys("Prateek");
      driver.findElement(By.id("login")).click();
  }

  @AfterClass
  public void afterTest() {
      driver.quit();
  }

}

XML文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "CrossBrowser Testing" parallel = "tests" thread-count ="2">
<test name = "Chrome Testing">
    <parameter name ="browser" value = "chrome"></parameter>
        <classes>
            <class name = "cross_browser.NewTest"></class>
        </classes>
</test>
<test name = "firefox Testing">
    <parameter name ="browser" value = "firefox"></parameter>
        <classes>
            <class name = "cross_browser.NewTest"></class>
        </classes>
</test>
</suite>

2 个答案:

答案 0 :(得分:1)

NoClassDefFoundError的

Java虚拟机无法在运行时找到特定类时,Java中出现

NoClassDefFoundError 编译时间。例如,如果我们已经解析了来自方法调用或访问的任何静态成员以及运行时期间不可用,然后 JVM 将抛出 NoClassDefFoundError

您看到的错误是:

Exception in thread "main" java.lang.NoClassDefFoundError: 
org/apache/commons/exec/Executor

这清楚地表明 Selenium 试图在运行时从org/apache/commons/exec/Executor解析特定的类,这是不可访问/可用的。

出了什么问题:

您已经提到添加 Common-Exec jar ,但似乎在 Class 或 Methods >编译时间在运行时期间不可用。

如果存在多个源以通过 JDK / Maven 来解析方法,则会发生此错误> / Gradle ,使用新JAR 文件进行升级时会出现这种情况。

解决方案:

以下是解决 NoClassDefFoundError 的几个步骤:

  • 如果在 Java Project 中使用 Selenium JAR ,只需在 Java Build Path 中添加必需的外部JAR ,删除未使用/不需要的。
  • 使用构建工具,例如 Maven Gradle 删除 Java Build Path 中的所有外部JAR Maven Gradle 将下载并解决所有必需的依赖项。
  • 如果使用 Selenium JAR ,请使用 selenium-java-xyz Java客户端使用 selenium-server-standalone -xyzjar ,它将所有必需的依赖项捆绑在一起。
  • 使用 Maven ,使用 <artifactId>selenium-java</artifactId> <artifactId>selenium-server</artifactId> 。避免同时使用两者。
  • pom.xml
  • 中删除不需要的其他<dependency>
  • 定期清理IDE中的 Project Workspace ,仅用于构建具有所需依赖项的项目。
  • 使用CCleaner工具定期清除OS杂务。
  • 进行系统重启
  • 如果您正在执行 Maven项目,请始终执行 maven clean maven install ,然后 { {1}}

答案 1 :(得分:0)

尝试添加此依赖项,它对我有用

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
</dependency>