File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
Thread.sleep(3000);
//截第一张图
String firstImageName = date.formatDateTime(new Date());
firstImageName = firstImageName.replace(":", "");
Log.info(firstImageName);
FileUtils.copyFile(screenshot, new File("D:\\Screenshot\\"+firstImageName+".jpg"));
Thread.sleep(3000);
//截第二张图
String secondImageName = date.formatDateTime(new Date());
secondImageName = secondImageName.replace(":", "");
FileUtils.copyFile(screenshot, new File("D:\\Screenshot\\"+secondImageName+".jpg"));
//生成两个文件对象,一个是期望图片,一个是实际图片
File fileInput = new File("D:\\Screenshot\\"+firstImageName+".jpg");
File fileOutputput = new File("D:\\Screenshot\\"+secondImageName+".jpg");
/*
* 以下是两个文件进行像素比对的算法实现,获取文件的像素大小,然后使用循环的方式将两张图的所有项目进行一一比对,如有任何一个像素不相同,则退出循环
* 将matchFlag变量的值设定为false,最后使用断言语句判断matchFlag是否为true。
* 如果80%为true表示两张图片一致,如果80%为flase表示两张图片并不是完全匹配
*/
BufferedImage bufileInput = ImageIO.read(fileInput);
DataBuffer dafileInput = bufileInput.getData().getDataBuffer();
int sizefileInput = dafileInput.getSize();
BufferedImage bufileOutput =ImageIO.read(fileOutputput);
DataBuffer dafileOutput = bufileOutput.getData().getDataBuffer();
int sizefileOutput = dafileOutput.getSize();
Boolean matchFlag = true;
int count = 0;
if(sizefileInput == sizefileOutput){
for(int j=0;j<sizefileInput;j++){
if(dafileInput.getElem(j) != dafileOutput.getElem(j)){
count = count + 1;
}
}
//是否大于20%都不一样
if(count > (sizefileOutput * 0.2) ){
//赋予false
matchFlag = false;
}
}else{matchFlag = false;}
Assert.assertTrue(matchFlag,"图片元素发生了改变请检查");
Log.error("图片元素发生了改变请检查");