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.20 bzoj3784: 树上的路径(二分答案+点分治)

    传送门 点分治好题. 题意简述:给一棵带边权的树,问所有路径中前mmm大的.m≤300000m\le300000m≤300000 思路: 网上有题解写了可以通过什么点分治序转化成超级钢琴那道题的做法蒟 ...

  2. tp5系统核心设计提供了一些可能会需要的钩子(位置)

    钩子    描述 参数 app_init 应用初始化标签位 无 app_begin 应用开始标签位 当前调度信息 module_init 模块初始化标签位 当前请求对象实例 action_begin ...

  3. 牛客训练四:Applese 的回文串(思维)

    题目链接:传送门 思路:插入不同的字符与删除不同的字符相同,所以每次判断到不同位置时将这个字符删除然后判断是否为回文串即可, 如果一开始就是回文串,那么答案也是yes. #include<ios ...

  4. c#多线程编程实战(原书第二版)文摘

    Thread t = new Thread(PrintNumbersWithDelay); t.Start(); t.Join(); 但我们在主程序中调用了t.Join方法,该方法允许我们等待直到线程 ...

  5. Tomcat架构解析(三)-----Engine、host、context解析以及web应用加载

    上一篇博文介绍了Server的创建,在Server创建完之后,就进入到Engine的创建过程,如下: 一.Engine的创建   1.创建Engine实例 当前次栈顶元素为Service对象,通过Se ...

  6. vue 开发系列(四) vue 使用外部JS

    概要 在开发时我们会经常需要使用到外部的JS,这样我们需要引入外部js,然后进行使用. 实现方法 我们在开发的过程中需要使用到 sha256 将用户的密码进行加密传输. 我们对js进行一点点改造. f ...

  7. 吓死baobao了

    早上远程连接服务器连不上,后面重启服务器,显示进入紧急修复模式:welcome to emergency mode!after logging in ,type “journalctl -xb” to ...

  8. 修正剑桥模型预测-用python3.4

    下面是预测结果: #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" ""& ...

  9. Application-identifier entitlement does not match问题的解决

    以下是一个老外的回答: This happened to me after installing a build from TestFlight and overwriting it with the ...

  10. hdu 2642

    这题应该就是标准的二维树状数组,应该没什么难度 处理一下x,y等于0的情况就过了 #include <iostream> #include <cstdio> #include ...