WebDriver高级应用实例(7)
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)的更多相关文章
- WebDriver高级应用实例(10)
10.1控制HTML5语言实现的视频播放器 目的:能够获取html5语言实现的视频播放器视频文件的地址.时长.控制进行播放暂停 被测网页的网址: http://www.w3school.com.cn/ ...
- WebDriver高级应用实例(9)
9.1封装操作表格的公用类 目的:能够使自己编写操作表格的公用类,并基于公用类进行表格中的元素的各类操作 被测网页的网址的HTML代码: <html> <body> <t ...
- WebDriver高级应用实例(8)
8.1使用Log4j在测试过程中打印日志 目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本 被测网页的网址: http://www.baidu.com 环境准备: (1)访问ht ...
- WebDriver高级应用实例(6)
6.1精确比较网页截图图片 目的:对于核心界面进行截屏,并且使用测试过程中的截图和以前测试过程中的截图进行比较.确认页面是否发生了改变 被测网页的网址: http://www.baidu.com Ja ...
- WebDriver高级应用实例(5)
5.1对象库(UI Map) 目的:能够使用配置文件存储被测试页面上的元素的定位方式和定位表达式,做到定位数据和程序的分离.方便不具备编码能力的测试人员进行修改和配置. 被测网页的网址: http:/ ...
- WebDriver高级应用实例(4)
4.1操作web页面的滚动条 被测网页的网址: http://v.sogou.com Java语言版本的API实例代码 import org.testng.annotations.Test; impo ...
- WebDriver高级应用实例(3)
3.1自动化下载某个文件 被测网页的网址: https://pypi.org/project/selenium/#files Java语言版本的API实例代码 import java.util.Has ...
- WebDriver高级应用实例(2)
2.1在日期选择器上进行日期选择 被测网页的网址: https://www.html5tricks.com/demo/Kalendae/index.html Java语言版本的API实例代码 impo ...
- WebDriver高级应用实例(1)
1.1使用JavaScriptExecutor单击元素 被测网页的网址: http://www.baidu.com Java语言版本的API实例代码 import org.testng.annotat ...
随机推荐
- window.frames
// 点击事件 function zTreeOnClick(event, treeId, treeNode) { id = treeNode.id; window.frames["treeF ...
- Router pipeline
from 2013-HPCA-Breaking the On-Chip Latency Barrier Using SMART book_Principles and Practices of Int ...
- Source Routing
Source routing Followed by book_Principles and Practices of Interconnection Networks, p204. With sou ...
- related work
Traditional approaches, e.g., genetic algorithm (GA) [2] and ant colony optimization (ACO) [3], can ...
- 查阅JDK,collection与collections区别大
看起来collection,和collections相像,但其中的差别之大你造吗? Collection是Collection层次结构中的根接口.Collection表示一组对象,这也对象也称为col ...
- MapGIS计算瓦片数据集
https://www.docin.com/p-2103834433.html
- MySQL5.7的安装配置
双击进入安装,如下图: 2 点击上图红框“Install MySQL Products”进入安装界面,如下图: 3 根据上图当中第一步骤与第二步骤,进入下图: 4 进入设置界面,如下图: 5 在原来旧 ...
- lowbit(x)
int Lowbit(int x) { return x&(-x); } lowbit当中x,-x,补码,反码,傻傻分不清楚.我们先看看两个二进制数相减的问题 两个二进制数相减的相关问题 两个 ...
- 关于java弱引用
最近在学java虚拟机相关的东西,看了一篇微信的推送 在此分享https://mp.weixin.qq.com/s/oLhZWWWIVc90cNUBukkqHw 一.强引用 强引用就是我们经常使用的 ...
- scrapy分布式
开始之前我们得知道scrapy-redis的一些配置:PS 这些配置是写在Scrapy项目的settings.py中的! #启用Redis调度存储请求队列SCHEDULER = "scrap ...