【问题标题】:Getting "java.lang.NoClassDefFoundError" for Testng Dataprovider with Excel使用 Excel 为 Testng Dataprovider 获取“java.lang.NoClassDefFoundError”
【发布时间】:2019-02-23 04:01:39
【问题描述】:

我无法克服错误“java.lang.NoClassDefFoundError”

试过了: 1-清理项目 2- 更新 testng xml 3- 验证包/类结构

似乎没有任何效果:

注意:我没有使用 Maven,所有 jar 文件都是最新的(Testng、Apache、Selenium)

测试类代码:

@DataProvider(name ="calldata")
public Object[][] getData() {

    ExcelUtility util = new ExcelUtility("excel path");

    int rows = util.getRowCount(0);

    Object data [][] = new Object[rows] [6];

    for(int i=1; i<rows; i++)
    {
        data[i][0]=util.getData(0, i, 0);
        data[i][1]=util.getData(0, i, 1);
        data[i][1]=util.getData(0, i, 2);
        data[i][1]=util.getData(0, i, 3);
        data[i][1]=util.getData(0, i, 4);
        data[i][1]=util.getData(0, i, 5);
    }

    return data;
}

@Test(dataProvider ="calldata")
 public void AddaDependent(String url, String client, String eliggrp, String empnumber, String firstname, String SSN) 
    {

Excel 实用程序代码:

打包AllExcel;

导入 java.io.File; 导入 java.io.FileInputStream;

导入 org.apache.poi.xssf.usermodel.XSSFSheet; 导入 org.apache.poi.xssf.usermodel.XSSFWorkbook;

公共类 ExcelUtility {

XSSFWorkbook wb;
XSSFSheet sheet1;

public ExcelUtility(String excelPath)
{
    try
    {
        File src = new File(excelPath);

        FileInputStream fis= new FileInputStream(src);
        wb = new XSSFWorkbook(fis);

    }
    catch (Exception e) {
        System.out.println(e.getMessage());

    }
}

public String getData(int sheetNumber, int row, int column)
{
    sheet1 = wb.getSheetAt(0);

    String data = sheet1.getRow(row).getCell(column).getStringCellValue();

    return data;
}

public int getRowCount(int sheetIndex)
{
    int row = wb.getSheetAt(sheetIndex).getLastRowNum();

    row = row+1;

    return row;
}

}

错误:

[RemoteTestNG] 检测到 TestNG 版本 6.14.3 [实用程序] [错误] [错误] java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile 在 org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:298) 在 org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:37) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:307) 在 AllExcel.ExcelUtility.(ExcelUtility.java:22) 在 AutFramework.AddDependent.getData(AddDependent.java:36) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源)

【问题讨论】:

标签: selenium-webdriver apache-poi testng-dataprovider


【解决方案1】:

下载 apache compress jars 并添加到库中,我试过了,效果很好。

【讨论】:

    【解决方案2】:

    基本上按照 Axel 的链接,我复制了“common compress jar”并且提到的错误消失了,现在我遇到了另一个错误,需要在另一个问题中处理。暂时关闭这个

    【讨论】:

      【解决方案3】:

      只要你不使用 Maven,你可以从这里下载 jar。 将它添加到您的类路径中,它应该可以工作: https://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.2

      原因是,Apache 已从 commons-Collections4-4.0 中删除了接口 ListValuedMap。

      【讨论】:

      • 我已经在构建路径中添加了 jar "commons-collections4-4.2.jar",你还有什么意思吗?
      • 我添加了通用压缩 jar,现在我收到以下错误:[Utils] [ERROR] [Error] java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell at org.apache .poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:1075) 在 org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:396) 在 org.apache.poi.xssf.usermodel.XSSFCell .getStringCellValue(XSSFCell.java:348) 在 AllExcel.ExcelUtility.getData(ExcelUtility.java:35) 在 AutFramework.AddDependent.getData(AddDependent.java:47)
      • 您在数字单元格上调用 getStringCellValue() - 这就是为什么您会收到异常 java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell - 有很多关于如何正确读取 poi 单元格的示例 - 您需要使用 cell.getCellType( ) 并根据其类型,调用 getStringCellValue 或 getNumericCellValue 或 getBooleanCellValue 等
      • 这个错误非常简单。您正在从您的 excel 中读取一个数字,但您尝试将读取的值分配为 STRING 而不是 INTEGER、DECIMAL、LONG..
      猜你喜欢
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2015-09-08
      • 2020-03-01
      • 2014-07-26
      相关资源
      最近更新 更多