中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Appium自動化-----數據驅動讀取外部Excel文件

發布時間:2020-07-05 14:51:03 來源:網絡 閱讀:779 作者:小白菜鳥1 欄目:開發技術

=====要進行操作的Excel======

Appium自動化-----數據驅動讀取外部Excel文件

=====對以上Excel的操作==============

//Excel的文件操作
public class ExcelUtilTest {
    
    private XSSFWorkbook excelWBook;//Excel工作薄
    private XSSFSheet excelWSheet;//工作表
    private XSSFRow row;//行
    private XSSFCell cell;//列
    private String filePath;//Excel工作薄路徑
    
    /**構造方法*/
    //設定要操作的Excel的文件路徑和Excel文件中的sheet名稱
    //在讀寫Excel的時候,均需要調用此方法,設定要操作的Excel文件路徑和要操作的sheet名稱
    public ExcelUtilTest(String path,String sheetName) throws Exception{
        FileInputStream excelFile;
        this.filePath=path;
        
        try {
            //實例化Excel文件的FileInputStream對象
            excelFile = new FileInputStream(path);
            //實例化Excel文件的XSSFWorkbook對象
            excelWBook = new XSSFWorkbook();
            //實例化Excel文件的XSSFSheet對象,指定Excel文件中的sheet名稱;
            excelWSheet = excelWBook.getSheet(sheetName);
            
        } catch (Exception e) {
            throw (e);
        }
    }
    
    
    /**讀取Excel文件指定單元格的函數,此函數只支持后綴為xlsx的Excel文件*/
    public String getCellData(int rowNum,int cellNum)throws Exception{
        try {
            //通過函數參數指定單元格的行號和列表,獲取指定的單元格對象
            cell = excelWSheet.getRow(rowNum).getCell(cellNum);
            //如果單元格的內容為字符串類型,則使用getStringCellValue()獲取單元格的內容
            //如果單元格的內容為數字類型,則使用getNumericCellValue()獲取單元格的內容
            String cellData="";
            /**獲取單元格類型*/
            if(cell.getCellType() == XSSFCell.CELL_TYPE_STRING){
                cellData = cell.getStringCellValue();
            }else if(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC){
                DecimalFormat df = new DecimalFormat("0");//保留小數的方法,0為不保留小數
                cellData = df.format(cell.getNumericCellValue());//format()格式化
            }
            return cellData;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "";
        }

    }
    
    /**在Excel文件的執行單元格中寫輸入數據,此函數只支持后綴為xlsx的文件寫入
     * @param result 結果
     * @param rowNum 行數
     * @param cellNum 列數
     * */
    public void setCellData(int rowNum,int cellNum,String result) throws Exception{
        
        try{
            //獲取Excel文件中的行對象
            row=excelWSheet.getRow(rowNum);
            //如果單元格為空,則返回Null
            cell = row.getCell(cellNum,Row.RETURN_BLANK_AS_NULL);
            
            if(cell == null){
                //當單元格對象是null的時候,則創建單元格,因為單元格為空,無法調用單元格對象的setCellValue方法設定單元格的值
                cell=row.createCell(cellNum);
                //創建單元格后可以調用單元格對象的setCellValue方法設定單元格的值
                cell.setCellValue(result);
            }else{
                //單元格中如果有內容,則可以直接調用單元格對象的setCellValue方法設定單元格的值
                cell.setCellValue(result);
                System.out.println("單元格值設定完成");
            }
            
            //實例化寫入Excel文件的文件輸出流對象
            FileOutputStream fileOut = new FileOutputStream(filePath);
            //將內容寫入Excel文件中
            excelWBook.write(fileOut);
            //調用flush方法強制刷新寫入文件
            fileOut.flush();
            //關閉文件輸出流對象
            fileOut.close();
            
        }catch(Exception e){
            e.printStackTrace();
            throw(e);
        }
        
    }
    
    /**從Excel文件獲取測試數據的靜態方法
     * @throws IOException
     * */
    public static Object[][] getTestData(String excelFilePath,String sheetName) throws IOException{
        //根據參數傳入的數據文件路徑和文件名稱,組合出Excel數據文件的絕對路徑
        File file=new File(excelFilePath);
        
        //創建FileInputStream對象用于讀取Excel文件
        FileInputStream inputStream = new FileInputStream(file);
        
        //聲明Workbook對象
        Workbook workBook = null;
        
        //獲取文件類型的后綴名;
        String fileExtensionName = excelFilePath.substring(excelFilePath.indexOf("."));
        
        //判斷如果是xlsx,則使用 XSSFWorkbook 對象進行實例化
        //如果是xls,則使用 SSFWorkbook 對象進行實例化
        if(fileExtensionName.equals(".xlsx")){
            
            workBook = new XSSFWorkbook(inputStream);
            
        }else if(fileExtensionName.equals(".xls")){
            workBook = new HSSFWorkbook(inputStream);
        }
        
        //通過sheetName參數,生成sheet對象
        Sheet sheet = workBook.getSheet(sheetName);
        
        //獲取Excel數據文件中sheet1中數據的行數,getLastRowNum方法獲取數據的最后行號
        //getFirstRowNum方法獲取數據的第一行行號,相減之后算出數據的行數
        int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();
        System.out.println(sheet+"總行數是"+rowCount);
        
        //創建名為records的list對象來存儲從Excel數據文件中獲取的數據
        List<Object[]> records = new ArrayList<Object[]>();
        
        //使用2個for循環遍歷Excel數據文件中的所有數據(除了第一行,第一行是數據列名稱),所以從1開始
        for(int i =1;i<=rowCount;i++){
            //使用getRow()獲取行對象
            Row row=sheet.getRow(i);
            
            /*聲明一個數組,來存儲Excel數據文件每行中的測試用例和數據,數組的大小用getLastCellNum-1來進行動態聲明,實現測試數據個數和數組大小相一致
             * 因為Excel數據文件中的測試數據航的最后一個單元格為測試執行結果,倒數第二個單元格為此測試數據行
             * 是否運行的狀態。所最后兩列的單元格數據并不需要傳入到測試方法中,所以使用getLastCellNum-2的方法去掉每行中的最后兩個單元格數據
             * 計算出需要存儲的測試數據個數,并作為測試數據數組的初始化大小
            */
            String fields[]=new String[row.getLastCellNum()-2];//創建一個String類型的數組,并指定大小
            
            /*if用來判斷數據行是否要參加測試的執行,Excel文件的倒數第二行為數據行的狀態位,標記為*
             * “y”表示此數據要被測試腳本執行,標記為非“y”的數據行均被認為不會參與測試腳本的執行,會被跳過
             * */
            String yesOrNot=row.getCell(row.getLastCellNum()-2).getStringCellValue();
//            System.out.println(row.getCell(row.getLastCellNum()-2).getCellType()==XSSFCell.CELL_TYPE_NUMERIC);
            
            if(row.getCell(row.getLastCellNum()-2).getStringCellValue().equals("y")){    
                for(int j=0;j<row.getLastCellNum()-2;j++){
                    //判斷Excel的單元格字段是數字還是字符,字符串格式調用getStringCellValue()獲取
                    //數字格式調用getNumericCellValue()獲取
                    //System.out.println(row.getCell(j).getCellType()== XSSFCell.CELL_TYPE_NUMERIC);
                    if(row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_STRING){
                        fields[j]=row.getCell(j).getStringCellValue();        
                    }else if(row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_NUMERIC){
                        DecimalFormat df= new DecimalFormat("0");
                        fields[j]=df.format(row.getCell(j).getNumericCellValue());
                    }else{
                        System.out.println("格式錯誤");
                    }
                    //System.out.println(fields[j]);
                }
                
                //fields的數據對象存儲到records的list中
                records.add(fields);
            }
            
        }
        
        //定義函數返回值,即object[][]
        //將存儲測試數據的list轉換為一個Object的二維數據
        Object[][] results=new Object[records.size()][];
        
        //設置二維數據每行的值,每行是個object對象
        for(int i=0;i<records.size();i++){
            results[i]=records.get(i);
        }
        //關閉Excel文件
        inputStream.close();
        return results;
    }
    
    
    //遍歷二維數組
    public void printArray(Object[][] arr){
        for (int x = 0; x < arr.length; x++) {  
            for (int y = 0; y < arr[x].length; y++) {  
                System.out.print(arr[x][y] + " ");  
            }  
            System.out.println("");  
        }  
    }
}



======Excel的文件操作類的--測試類=====

public class TestExcelUticl {

    public static void main(String[] args) throws Exception {
        ExcelUtilTest eut = new ExcelUtilTest("configs/測試用例.xlsx", "登錄數據");//excel名字,sheet名字
//        eut.getCellData(3, 3);
        Object[][] arr=eut.getTestData("configs/測試用例.xlsx", "登錄數據");
        eut.printArray(arr);
    }

}


=====應用到自動化數據驅動里,實現自動化數據驅動讀取外部Excel文件=========


     /**查找元素*/
    @Test(dataProvider="loginTestData")
    public static void testCase(String loginTestData1,String loginTestData2){
            Thread.sleep(5000);//等待
        //進入
        driver.findElementById("元素定位id").click();
        //手機號
        AndroidElement modile= driver.findElementById("元素定位id");
        modile.clear();
        modile.sendKeys(loginTestData1);
        //驗證碼
        AndroidElement pws=driver.findElementById("元素定位id");
        pws.clear();
        pws.sendKeys(loginTestData2);
        //點擊登錄
        driver.findElementById("元素定位id").click();
        
    }
    
    /**登錄數據驅動
     * */
    @DataProvider(name="loginTestData")  
    public static Object[][] data() throws IOException  
    {  
        Object[][] arr=ExcelUtilTest.getTestData("configs/測試用例.xlsx", "登錄數據");
        return  arr;
    } 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克拉玛依市| 荆门市| 宜兰市| 元谋县| 蒙阴县| 闸北区| 榆树市| 蒙自县| 信丰县| 墨脱县| 闵行区| 织金县| 尚义县| 从江县| 晋中市| 汝阳县| 岫岩| 文安县| 南宁市| 伽师县| 肥乡县| 罗甸县| 湟中县| 轮台县| 和林格尔县| 惠东县| 巩义市| 利辛县| 桓台县| 柘荣县| 依兰县| 教育| 鹤庆县| 贵阳市| 亳州市| 新昌县| 商都县| 瑞丽市| 上栗县| 台北市| 宁远县|