7.1在测试中断言失败的步骤进行屏幕截图

  目的:在测试过程中,在断言语句执行失败时,对当前的浏览器进行截屏,并在磁盘上新建一个yyyy-mm-dd格式的目录,并在断言失败时新建一个已hh-mm-ss格式的截图文件

  被测网页的网址:

  http://www.baidu.com

  Java语言版本的API实例代码 

  需要新建一个Package,将FileUtil类、DateUtil类和TestFailCaptureScreen测试类3个文件都放到这个Package下

  此例子借助了两个工具类来实现测试目的,此种方式将代码封装,便于提高代码的复用度,提高测试脚本编写的效率

  DateUtil类:

  

import java.util.Date;
//DataUtil类主要用于生成年、月、日、小时、分钟和秒的信息,用于生成保存截图文件目录名和文件名
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;
}
/*
* 返回年份
* @return 返回年份
* */
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);
}
/*
* 返回月份
* @return 返回月份
* */
public static int getMonth(java.util.Date date){
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MONTH)+1;
}
/*
* 返回月份中的第几天
* @return 返回月份中的第几天
* */
public static int getDay(java.util.Date date){
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.DAY_OF_MONTH);
}
/*
* 返回小时
* @param date
* 日期
* @return返回小时
* */
public static int getHour(java.util.Date date){
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.HOUR_OF_DAY);
}
/*
* 返回分钟
* @param date
* 日期
* @return返回分钟
* */
public static int getMinute(java.util.Date date){
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MINUTE);
}
/*
* 返回秒
* @param date
* 日期
* @return 返回秒
* */
public static int getSecond(java.util.Date date){
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.SECOND);
}
}

FileUtil类:

import java.io.File;
import java.io.IOException; public class FileUtil {
/*
* 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()){
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("创建单个文件"+destFileName+"失败");
return false;
}
} catch (IOException e) {
e.printStackTrace();
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;
}
}
}

  TestFailCaptureScreen测试类:

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod; import java.io.File;
import java.util.Date; import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod; public class TestFailCaptureScreen {
WebDriver driver;
String url = "http://www.baidu.com";
@Test
public void testSearch() {
driver.findElement(By.id("kw")).sendKeys("seleium");
driver.findElement(By.id("su")).click();
try {
/*
* 断言页面的代码是否存在‘事在人为’这4个关键字,因页面中没有这4个字所以触发catch语句执行并触发截图操作
* */
Assert.assertTrue(driver.getPageSource().contains("事在人为"));
System.out.println("assert后续执行了");
} catch (AssertionError e) {
System.out.println("catch中的代码被执行了");
takeTakesScreenshot(driver);
}
}
/*
* 在测试类中声明截图的方法,截图方法调用了时间类和文件操作类的静态方法,用时间格式生成目录名称和截图文件名称
* */
public void takeTakesScreenshot(WebDriver driver) {
try {
//生成日期对象
Date date = new Date();
//调用DateUtil类中的方法,生成截图文件夹日期名称
String picDir = "e:\\"+String.valueOf(DateUtil.getYear(date))+"-"+String.valueOf(DateUtil.getMonth(date))+"-"+String.valueOf(DateUtil.getDay(date));
if(!new File(picDir).exists()){
FileUtil.createDir(picDir);
}
//调用DateUtil类中的方法,生成截图文件的时间名称
String filePath = picDir+"\\"+String.valueOf(DateUtil.getHour(new Date()))
+"-"+String.valueOf(DateUtil.getMinute(new Date()))
+"-"+String.valueOf(DateUtil.getSecond(new Date()))+".png";
//进行截图时将文件保存在srcFile对象中
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//将截图文件内容写到磁盘中生成截图文件
FileUtils.copyFile(srcFile,new File(filePath));
} catch (Exception e) {
e.printStackTrace();
} }
@BeforeMethod
public void beforeMethod() {
System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(url);
} @AfterMethod
public void afterMethod() {
driver.quit();
} }

  

WebDriver高级应用实例(7)的更多相关文章

  1. WebDriver高级应用实例(10)

    10.1控制HTML5语言实现的视频播放器 目的:能够获取html5语言实现的视频播放器视频文件的地址.时长.控制进行播放暂停 被测网页的网址: http://www.w3school.com.cn/ ...

  2. WebDriver高级应用实例(9)

    9.1封装操作表格的公用类 目的:能够使自己编写操作表格的公用类,并基于公用类进行表格中的元素的各类操作 被测网页的网址的HTML代码: <html> <body> <t ...

  3. WebDriver高级应用实例(8)

    8.1使用Log4j在测试过程中打印日志 目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本 被测网页的网址: http://www.baidu.com 环境准备: (1)访问ht ...

  4. WebDriver高级应用实例(6)

    6.1精确比较网页截图图片 目的:对于核心界面进行截屏,并且使用测试过程中的截图和以前测试过程中的截图进行比较.确认页面是否发生了改变 被测网页的网址: http://www.baidu.com Ja ...

  5. WebDriver高级应用实例(5)

    5.1对象库(UI Map) 目的:能够使用配置文件存储被测试页面上的元素的定位方式和定位表达式,做到定位数据和程序的分离.方便不具备编码能力的测试人员进行修改和配置. 被测网页的网址: http:/ ...

  6. WebDriver高级应用实例(4)

    4.1操作web页面的滚动条 被测网页的网址: http://v.sogou.com Java语言版本的API实例代码 import org.testng.annotations.Test; impo ...

  7. WebDriver高级应用实例(3)

    3.1自动化下载某个文件 被测网页的网址: https://pypi.org/project/selenium/#files Java语言版本的API实例代码 import java.util.Has ...

  8. WebDriver高级应用实例(2)

    2.1在日期选择器上进行日期选择 被测网页的网址: https://www.html5tricks.com/demo/Kalendae/index.html Java语言版本的API实例代码 impo ...

  9. WebDriver高级应用实例(1)

    1.1使用JavaScriptExecutor单击元素 被测网页的网址: http://www.baidu.com Java语言版本的API实例代码 import org.testng.annotat ...

随机推荐

  1. 2019.01.03 bzoj3456: 城市规划(生成函数+多项式取对)

    传送门 生成函数好题. 题意:求n个点的简单(无重边无自环)无向连通图数目 思路: 对简单无向图构造生成函数f(x)=∑n2Cn2xnn!f(x)=\sum_n2^{C_n^2}\frac{x^n}{ ...

  2. 解决maltab的中文和英文字体问题,中文乱码

    用比较好看的编程字体,偏偏不显示中文,用支持中文的字体,英文不是等宽的,非常难看. 最近在网上找这方面的解决方法,发现解决问题的方法还是有的. 其实这个问题的原因就是系统自带的等宽字体,不支持中文,解 ...

  3. nullptr(c++11)

    1.概念 用字面值常量nullptr来初始化或赋值来得到空指针 2.c++11之前使用NULL或0 1)NULL是一个宏定义(预处理变量),定义在cstdlib中,其值就是0:对于预处理变量,预处理器 ...

  4. c#利用循环将类实例化为对象

    参考:https://yq.aliyun.com/wenzhang/show_6121 上面的代码每次使用前并没有实例化,会报错,实例化以下就好了,参考:http://bbs.csdn.net/top ...

  5. i2c设备驱动注册

      Linux I2C设备驱动编写(二) 原创 2014年03月16日 23:26:50   在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_driver.i2c ...

  6. js实现百度搜索框滑动固定顶部

    现在很多主流系统例如百度.有道.爱奇艺等的搜索框都有一个特点,滑动到刚好看不到搜索框时,固定搜索框到顶部,这也算是一个对用户友好型的操 作. 在看了百度的js和css后自己摸索出来实现效果,还是学艺不 ...

  7. (转) HighCharts 非规律日期 多条曲线的 绘画

    转自:http://blog.csdn.net/z69183787/article/details/8651296 项目中需要为A,B 2个元素 绘出统计值的曲线,但A与B 的 时间点 并不一致,查找 ...

  8. python-Django-01基础配置

    参考资料地址 http://www.ziqiangxuetang.com/django/django-install.html 官方文档 一: 1先下载Django源码包,下载地址https://ww ...

  9. day30(对象转json(java))

    转换之前需要知道什么是json json类似于map集合:键值对的方式存在,是一种轻量级数据交互格式. eg: {name:" ",age:15} [{name:" &q ...

  10. input.php

    <?php /** * */ class Input { function get($index = NULL, $xss_clean = FALSE) { if($index == NULL ...