selenium-webdriver - 使用 Excel 为 Testng Dataprovider 获取“java.lang.NoClassDefFoundError”
问题描述
我无法克服错误“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 [Utils] [ERROR] [Error] java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile at org.apache.poi.openxml4j.opc.OPCPackage。打开(OPCPackage.java:298)在 org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:37) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java: 307) 在 AllExcel.ExcelUtility.<init>(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(未知来源)
解决方案
只要你不使用 Maven,你可以从这里下载 jar。将它添加到您的类路径中,它应该可以工作: https ://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.2
原因是,Apache 已从 commons-Collections4-4.0 中删除了接口 ListValuedMap。
推荐阅读
- python-3.x - RuntimeError:字典在迭代期间改变了大小,你能告诉我如何解决这个问题
- json - 一种查看reddit图像是否已被删除的方法
- python - 将两个数组之间的行匹配限制为特定列的值
- reactjs - Docker - npm 错误!enoent ENOENT:没有这样的文件或目录,打开 '/package.json' ----- /docker-entrypoint.sh: 38: exec: npm: not found
- drupal-8 - Drupal 8 上的缓存图像
- android - 如何在不发生重复类冲突的情况下混淆两个不同 `.aar` 的包名称?
- git - 如何确保 .gitignore 不缺少 Visual Studio 2017 引用?
- javascript - 图像比较滑块在 Firefox 上不起作用
- python-3.x - 类型对象“...”没有属性“对象”
- windows - 如何从批处理脚本将网络适配器的网络类型更改为专用/公共