Java 使用testNG读取selenium中的excel数据
我刚接触硒,还在学习。我正在尝试用TestNG编写一个程序,其中包含两个测试,分别用于从excel读取数据和使用ApachePOI进行编写。我有一个XLS和一个XLSX文件在同一个文件夹中,并试图使用这两个文件。我希望在testng.xml中配置excels的路径和名称。当我执行第一个读取数据的测试时,工作表名称被读取为xml。下面是我的testng.xmlJava 使用testNG读取selenium中的excel数据,java,excel,selenium,selenium-webdriver,apache-poi,Java,Excel,Selenium,Selenium Webdriver,Apache Poi,我刚接触硒,还在学习。我正在尝试用TestNG编写一个程序,其中包含两个测试,分别用于从excel读取数据和使用ApachePOI进行编写。我有一个XLS和一个XLSX文件在同一个文件夹中,并试图使用这两个文件。我希望在testng.xml中配置excels的路径和名称。当我执行第一个读取数据的测试时,工作表名称被读取为xml。下面是我的testng.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="2">
<parameter name="filePath" value="C:\\Technologies\\Selenium\\WebDriver\\DataFiles\\ExcelFiles"></parameter>
<test name="Xlsx">
<parameter name="fileName" value="12142015_sx.xlsx"></parameter>
<parameter name="sheetName" value="xlsx_1"></parameter>
<classes>
<class name="handlefiles.handleExcel"/>
</classes>
</test>
<test name="Xls">
<parameter name="fileName" value="12142015_s.xls"></parameter>
<parameter name="sheetName" value="xls_1"></parameter>
<classes>
<class name="handlefiles.handleExcel"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
下面是java类代码
package handlefiles;
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.annotations.*;
public class handleExcel {
@BeforeTest
@Parameters({"filePath", "fileName", "sheetName"})
public void readExcel(String filePath, String fileName, String sheetName) throws IOException{
// set the file path
File eFile = new File(filePath+"\\"+fileName);
//print the file path
System.out.println("File is at: "+eFile);
FileInputStream inputstream = new FileInputStream(eFile);
Workbook wb = null;
// Read and publish extension
String extensionName = fileName.substring(fileName.indexOf("."));
System.out.println("File type is: "+extensionName);
//Read the file
if(extensionName.equalsIgnoreCase(".xlsx")){
wb = new XSSFWorkbook(inputstream);
}else if(extensionName.equalsIgnoreCase(".xls")){
wb = new HSSFWorkbook(inputstream);
}
//Read the sheet name
Sheet wbSheet = wb.getSheet(sheetName);
System.out.println("Sheet Name is: "+wbSheet);
}
@Test(priority=1)
public void readData(Sheet wbSheet) {
// Get the row count
int rowCount = wbSheet.getLastRowNum() - wbSheet.getFirstRowNum();
// print data from excel
for (int i=0; i<rowCount-1; i++){
Row row = wbSheet.getRow(i);
for (int j=0; j<row.getLastCellNum(); j++){
System.out.println(row.getCell(j).getStringCellValue()+"||");
}
}
}
}
包装手文件;
导入java.io.*;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.testng.annotations.*;
公共类handleExcel{
@试验前
@参数({“文件路径”、“文件名”、“图纸名”})
public void readExcel(字符串文件路径、字符串文件名、字符串表名)引发IOException{
//设置文件路径
File eFile=新文件(filePath+“\\\”+文件名);
//打印文件路径
System.out.println(“文件位于:”+eFile);
FileInputStream inputstream=新的FileInputStream(eFile);
工作簿wb=null;
//读取和发布扩展
字符串扩展名=fileName.substring(fileName.indexOf(“.”);
System.out.println(“文件类型为:“+extensionName”);
//读文件
if(extensionName.equalsIgnoreCase(“.xlsx”)){
wb=新XSSF工作簿(inputstream);
}else if(extensionName.equalsIgnoreCase(“.xls”)){
wb=新的HSSF工作手册(输入流);
}
//阅读图纸名称
Sheet wbSheet=wb.getSheet(sheetName);
System.out.println(“图纸名称为:+wbSheet”);
}
@测试(优先级=1)
公共无效读取数据(工作表wbSheet){
//获取行计数
int rowCount=wbSheet.getLastRowNum()-wbSheet.getFirstRowNum();
//从excel打印数据
对于(int i=0;i删除以下IF条件和
if(extensionName.equalsIgnoreCase(".xlsx")){
wb = new XSSFWorkbook(inputstream);
}else if(extensionName.equalsIgnoreCase(".xls")){
wb = new HSSFWorkbook(inputstream);
}
添加这段代码
wb = new XSSFWorkbook(inputstream);
我过去使用过,但我从未告诉过我使用的扩展名。根据堆栈跟踪,POI认为您试图使用POI的XLS代码(不是XLSX代码)打开XLSX文件。可能该文件的扩展名是“.XLS”,但应该是“.XLSX”,或者该文件已损坏,等等(或者您发现了错误)
我建议改用POI:
用于创建适当类型工作簿的工厂(如有)
或),通过从提供的
输入
是否确定.xls文件包含2007年以前的excel内容?以下是“属性-Microsoft excel 97-2003工作表(.xls)”中的文件类型我尝试了此操作。异常已更改,但工作表名称仍被读取为XML。下面是testNG跟踪-org.testNG.TestNGException:Method readData需要1个参数,但@Test annotation中提供了0。控制台显示如下。工作表名称为:name:/xl/worksheets/sheet1.XML-内容类型:application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml工作表名称为:Name:/xl/worksheets/sheet1.xml-内容类型:application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml@Naresh,我知道你已经接受了这个答案,但你的评论让我觉得这并没有回答你的问题。你是不是碰巧接受了错误的答案?谢谢。@mfulto谢谢你的注意。这可能是意外发生的,不是故意的。我已经纠正了。
wb = new XSSFWorkbook(inputstream);