在测试中对断言失败的步骤进行截图并保存!
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(); } } }