基於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的內容(即我知道我需要讀取的范圍是哪些)。我們在使用自動化框架時,希望是按需讀取(即按照固定的數據結構格式來讀取),如果非要指定行/列的具體值,反而是舍近求遠了(數據太多了,我不知道從哪里開始讀)。

  如何解決這個問題,我們將在后續討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM