基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)
之前,我们使用了读取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的内容(即我知道我需要读取的范围是哪些)。我们在使用自动化框架时,希望是按需读取(即按照固定的数据结构格式来读取),如果非要指定行/列的具体值,反而是舍近求远了(数据太多了,我不知道从哪里开始读)。
如何解决这个问题,我们将在后续讨论。