问题描述
我正在尝试在测试项目中包括图像验证,因此我可以在网站的某些区域进行验证,例如预告片,页脚等。
我用selenium截取屏幕截图,并在第一次将其保存为PNG文件,然后在每个测试用例中,我将截取一个新的屏幕截图,然后通过ShutterBug库将两者进行比较并打印出不同的图像。
主要问题是,当我截取屏幕截图时,每个浏览器都有不同的大小,而当我通过Graphics2D调整大小时,它会有所不同。我也尝试过使用openCV,但是它不起作用。因为抗锯齿。
private static BufferedImage resize(BufferedImage img,int height,int width,int imageType) throws IOException {
Image tmp = img.getScaledInstance(width,-1,Image.SCALE_SMOOTH);
BufferedImage resized = new BufferedImage(width,height,imageType);
Graphics2D g2d = resized.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING,RenderingHints.VALUE_DITHER_ENABLE);
g2d.drawImage(tmp,null);
g2d.dispose();
return resized;
}
private Mat resize(BufferedImage image,int width){
Size size = new Size(width,height);
Mat img = Imgcodecs.imdecode(new MatOfByte(bufferedImagetoByteArray(image)),Imgcodecs.IMREAD_COLOR);
Mat resized=new Mat(size,CvType.CV_64FC4);
Imgproc.resize(img,resized,size,INTER_AREA);
return resized;
}
解决方法
我已经尝试了所有这些选项,但最后我现在正在使用 https://github.com/newsuk/AyeSpy
Aye Spy是一种高性能的可视化回归工具,可以捕获UI回归。
这非常简单且易于管理。
您只需要设置硒网格并运行json文件。
它将完美地进行比较,并为您提供类似的比较结果
您可以尝试一次,希望它将帮助您生成比较结果以进行测试
,有多种开源解决方案可用于比较 UI 自动化测试中的屏幕截图,它们的作用与您正在处理的相同。我建议您可以尝试Micoo,这是一个可视化测试服务,自托管和开源。当你习惯了 Micoo 时,你会发现用它做视觉测试是很容易的,当然,对比不同大小的图片完全不是问题。