在測試中對斷言失敗的步驟進行截圖並保存!


1.目的 :在測試當中,在斷言語句執行失敗的時候,對當前瀏覽器顯示的內容進行截圖操作,並且在磁盤上新建一個名為當天日期(yyyy-mm-dd)的目錄,並在目錄中新建一個名稱以斷言執行失敗時發生時間表示的hh-mm-dd格式的截圖文件;

2.步驟:創建DateUtil類 來獲取 年 月 日 時 分 秒  ;

3.創建FileUtil 類 進行創建目錄 保存 截圖文件 ;

4.代碼如下:

package scr.comm;
import java.util.*;
public class DateUtil {

    /*
     * 格式化輸出日期 ;
     * 
     * @return 一個字符型日期;
     */
    public static String format(java.util.Date date, String format) {
        String result = "";
        try {
            if (date != null) {
                java.text.DateFormat df = new java.text.SimpleDateFormat(format);
                result = df.format(date);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
//返回年份 ;
    public  static int getYear(java.util.Date date){
        java.util.Calendar c= java.util.Calendar.getInstance();
        c.setTime(date);
        return c.get(java.util.Calendar.YEAR);        
    }
//返回月份 ;
    public static int getMonth(java.util.Date date){
        java.util.Calendar calendar =java.util.Calendar.getInstance();
        calendar.setTime(date);
    return     calendar.get(java.util.Calendar.MONTH)+1;
    }
//返回月份中的第幾天;
    public  static int getDay(java.util.Date date){
    java.util.Calendar calendar =java.util.Calendar.getInstance();
    calendar.setTime(date);
    return calendar.get(java.util.Calendar.DAY_OF_MONTH);
    }
    //返回小時;
    public  static int getHour(Date date){
    Calendar calendar=Calendar.getInstance();
    calendar.setTime(date);
    return calendar.get(Calendar.HOUR);
    }
//返回分鍾 ;
    public static int getMinute(Date date ){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MINUTE);
    }
//返回秒    
    public static int getSecond(Date date ){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.SECOND);
    }
}

 

 

package scr.comm;

import java.io.File;
import java.io.IOException;

/*
 * FileUtil 用於創建目錄和文件,此例子中指使用了該類創建目錄的方法,創建文件僅供大家參考;
 */
public class FileUtil {

    public static boolean createFile(String destFileName) {
        File file = new File(destFileName);
        if (file.exists()) {
            System.out.println("創建" + destFileName + "失敗,因為該文件已經存在!");
            return false;
        }
        if (destFileName.endsWith(File.separator)) {
            System.out.println("創建單個文件 " + destFileName + "失敗,因為目標文件不能為目錄!");
            return false;
        }
        // 判斷目標文件所在目錄是否存在 ;
        if (!file.getParentFile().exists()) {
            // r如果目標文件不存在創建父目錄 ;
            System.out.println("目標文件不存在,准備創建它!");
            if (!file.getParentFile().mkdirs()) {
                System.out.println("創建目標文件所在目錄失敗");
                return false;
            }
        }
        try {
            if (file.createNewFile()) {
                System.out.println("創建" + destFileName + "成功!");
                return true;
            } else {
                System.out.println("c創建 " + destFileName + " 失敗!");
                return false;
            }

        } catch (IOException e) {
            System.out.println("創建 " + destFileName + " 失敗!" + e.getMessage());
            return false;
        }
    }

    public static boolean createDir(String destDirName) {
        File dir = new File(destDirName);
        if (dir.exists()) {
            System.out.println("創建目失敗" + destDirName + "已經存在!");
            return false;
        }
        // 創建目錄;
        if (dir.mkdirs()) {
            System.out.println("創建目錄" + destDirName + "成功 !");
            return true;
        } else {
            System.out.println("創建目錄" + destDirName + "失敗 !");
            return false;
        }

    }

}

 

測試類:

package testNGPractice;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import scr.comm.DateUtil;
import scr.comm.FileUtil;
import scr.comm.Log;
import scr.comm.OpenBrowserInfo;

public class TestFailCaptureScreen {
 public  WebDriver driver  ;
    @Test
  public void f() {
Log.startTextCase("@Test 開始執行!");
        String url ="http://www.sogou.com/";
    driver.navigate().to(url);
    driver.findElement(By.id("query")).sendKeys("光榮之路自動化測試!");
    driver.findElement(By.id("stb")).click();
    try{
        Assert.assertTrue(driver.getPageSource().contains("事在人為"));
        System.out.println("assert 執行了!");
    }catch(AssertionError e){
        System.out.println("catch  中的代碼 被執行了!");
        takeTakesScreenShot(driver);
        
    }
Log.endTestCase("@Test 執行結束 !");    
        
  }
  @BeforeMethod
  public void beforeMethod() {
      OpenBrowserInfo.Log4jInitialize();
      OpenBrowserInfo.SystemSetProperty();
      driver =new FirefoxDriver() ;  
  }

  @AfterMethod
  public void afterMethod() {
      driver.quit();
  }
  public void takeTakesScreenShot(WebDriver driver){
      try{
          //生成日期
          java.util.Date date =new java.util.Date();
          String picDir="D:\\"+
                  String.valueOf(DateUtil.getYear(date)+"-"+
                  String.valueOf(DateUtil.getMonth(date))+"-"+
                  String.valueOf(DateUtil.getDay(date))/*+" "+
                  String.valueOf(DateUtil.getHour(date))+"_"+
                  String.valueOf(DateUtil.getMinute(date))+"_"+
                  String.valueOf(DateUtil.getSecond(date))*/
                  );
         //創建目錄;
          if(!new File(picDir).exists()){
              FileUtil.createDir(picDir);
          }
          //調用DateUtil類生成 截圖文件的名稱;
          String filePath=picDir + "\\" +
                  String.valueOf(DateUtil.getHour(date))+"_"+
                  String.valueOf(DateUtil.getMinute(date))+"_"+
                  String.valueOf(DateUtil.getSecond(date))+".png" ;
          //進行截圖,並將文件內容保存到srcFile對象當中
          File srcFile= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
          //將截圖文件內容寫入到磁盤當中去;
          FileUtils.copyFile(srcFile,new File(filePath));
      }catch(Exception e ){
          e.printStackTrace();
          
          
      }
      
      
  }

}

 


免責聲明!

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



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