zoukankan      html  css  js  c++  java
  • 基于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的内容(即我知道我需要读取的范围是哪些)。我们在使用自动化框架时,希望是按需读取(即按照固定的数据结构格式来读取),如果非要指定行/列的具体值,反而是舍近求远了(数据太多了,我不知道从哪里开始读)。

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

  • 相关阅读:
    路径操作OS模块和Path类(全)一篇够用!
    数据可视化:绘图库-Matplotlib
    matplotlib中文显示的问题
    Microsoft Visual C++ 14.0 is required问题解决
    python习题——随机整数生成类
    python——时间模块
    怎么获取10个线程的结果再返回
    集群服务器定时任务,只运行一个定时器的设计
    分布式事务
    分布式数据库---分库分表
  • 原文地址:https://www.cnblogs.com/generalli2019/p/11424553.html
Copyright © 2011-2022 走看看