簡體   English   中英

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

[英]java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor

我正在嘗試執行以下代碼,但在運行時出現錯誤“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>

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,但似乎相關的方法是在Compile Time期間從一個來源解析的,而在Run Time期間不可用。

如果存在通過JDK / Maven / Gradle解析方法的多個源,並且在使用新 JAR文件升級時會發生這種情況,則會發生此錯誤。

解決方案:

以下是解決NoClassDefFoundError的幾個步驟:

  • 如果在Java 項目中使用Selenium JAR ,則僅在Java 構建路徑中添加所需的外部 JAR ,並刪除未使用/不需要的JAR
  • 如果使用構建工具(例如MavenGradle) ,請從Java 構建路徑中刪除所有外部 JAR MavenGradle將下載並解決所有必需的依賴項。
  • 如果使用Selenium JARs ,要么使用而不是使用selenium-java-xyz Java 客戶端使用selenium-server-standalone-xyzjar而不是將所有必需的依賴項捆綁在一起。
  • 如果使用Maven ,請使用<artifactId>selenium-java</artifactId><artifactId>selenium-server</artifactId> 避免同時使用兩者。
  • pom.xml 中刪除不需要的其他<dependency>
  • 定期清理 IDE 中的項目工作區,僅用於構建具有所需依賴項的項目。
  • 使用CCleaner工具定期清除操作系統雜務。
  • 進行系統重啟
  • 如果您正在執行Maven 項目,請始終執行maven cleanmaven installmaven test

嘗試添加此依賴項,它對我有用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM