比较图片通过openCV具有不同大小的硒

问题描述

我正在尝试在测试项目中包括图像验证,因此我可以在网站的某些区域进行验证,例如预告片,页脚等。

我用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文件。

它将完美地进行比较,并为您提供类似的比较结果

enter image description here

您可以尝试一次,希望它将帮助您生成比较结果以进行测试

,

有多种开源解决方案可用于比较 UI 自动化测试中的屏幕截图,它们的作用与您正在处理的相同。我建议您可以尝试Micoo,这是一个可视化测试服务,自托管和开源。当你习惯了 Micoo 时,你会发现用它做视觉测试是很容易的,当然,对比不同大小的图片完全不是问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...