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(); } } }