基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)

时间:2024-01-02 15:55:20

  之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类。下面,我们来进行一些扩展,通过Excel来读取页面元素。

  Excel的使用,大多数人应该都不陌生。那么Java读取Excel的方式主要有两种,这两种分别使用的是不同的jar包来实现。本篇我们来介绍其中的一种,即使用JXL的jar包,实现Excel文件的读取。

  在项目中导入jar包:jxl-2.6.12.jar  下载地址:https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl/2.6.12

package webui.xUtils;

import java.io.File;
import org.testng.Reporter; import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook; public class ExcelReadJXL {
/**
*jxl读取Excel
*指定文档路径及名称
* 指定开始及结束行,开始及结束列
* @param sheet_name 为sheet工作表名称,也可以用整型数字,从0开始。
* @param start_row 开始行,0开始
* @param end_row 结束行,0开始
* @param start_col 开始列,0开始
* @param end_col 结束列,0开始
* @param sourcefile .xls文件路径
* @return Object[][]
*/
private static logUtil log; public static Object[][] caseDataExcel(String sheet_name,int start_row,int end_row,int start_col,int end_col,String sourcefile){
String cell_value = null;
Cell cell = null;
int row_length = end_row - start_row +1;
int col_length = end_col - start_col +1;
String [][] testcase_data = new String [row_length][col_length];
Workbook testcase_data_book = null;
try {
testcase_data_book = Workbook.getWorkbook(new File(sourcefile));
Sheet testcase_data_sheet = testcase_data_book.getSheet(sheet_name);
//判断输入的数值是否超出范围值
if (end_row-start_row+1>row_length) {
log.error("选择的行数超出实际数据范围!请修改起始结束行数..");
Reporter.log("选择的行数超出实际数据范围!请修改起始结束行数..");
}
if (end_col-start_col+1>col_length) {
log.error("选择的数据列数超出实际数据范围内!请修改起始结束列数..");
Reporter.log("选择的数据列数超出实际数据范围内!请修改起始结束列数..");
}
//整体思想为:按每行为一组数据进行读取
//外循环--行数
for(int row = start_row,i = 0;row <= end_row || i < testcase_data.length ; row++,i++) {
//单独一行时,读取每一列的数据
//内循环--列数
for(int col = start_col,j = 0;col <= end_col || j < col_length ; col++,j++) {
cell = testcase_data_sheet.getCell(col,row);
cell_value = cell.getContents();
testcase_data[i][j] = cell_value;
}
}
}catch (Exception e) {
e.printStackTrace();
}
// log.info("读取Excel数据完成!");
Reporter.log("读取Excel数据完成!");
return testcase_data;
}
//读取全部sheet页数据
public static Object[][] case_data_excel_jxl(String sheet_name,String sourcefile){
String cell_value = null;
Cell cell = null;
String[][] testcase_data = null;
Workbook testcase_data_book = null;
try {
testcase_data_book = Workbook.getWorkbook(new File(sourcefile));
Sheet testcase_data_sheet = testcase_data_book.getSheet(sheet_name);
int rows = testcase_data_sheet.getRows();
int cols = testcase_data_sheet.getColumns();
testcase_data = new String[rows][cols];
//整体思想仍然是按行获取
//外循环--行数
for(int i = 0 ; i < rows ; i++) {
//内循环--列数,取每一行中每一列的数据
for(int j = 0 ; j < cols ; j++) {
//数据形式为(列号,行号)
cell = testcase_data_sheet.getCell(j, i);
cell_value = cell.getContents();
//存入字符串数组的形式为(行号,列号)
testcase_data[i][j] = cell_value;
}
}
}catch (Exception e) {
e.printStackTrace();
}
return testcase_data;
}
}

  从上面的代码可以看到,使用JXL的jar包来完成Excel的读取是相对简单的。主要的思想就是在指定行/列的范围,然后使用双循环进行遍历,从而达到读取数据的目的。

  但是,使用JXL读取是通常意义上的读取Excel的内容(即我知道我需要读取的范围是哪些)。我们在使用自动化框架时,希望是按需读取(即按照固定的数据结构格式来读取),如果非要指定行/列的具体值,反而是舍近求远了(数据太多了,我不知道从哪里开始读)。

  如何解决这个问题,我们将在后续讨论。