使用java在Selenium WebDriver中进行图像比较

时间:2016-03-15 12:46:19

标签: java selenium image-processing selenium-webdriver image-comparison

我目前在Selenium WebDriver工作,在自动化过程中比较两个图像。目前我正在使用像素比较,但问题是如果浏览器大小发生变化或系统不同,我运行自动化。

我必须比较两个图像,一个是已保存在某个位置的黄色图像,另一个是在自动化过程中拍摄的屏幕截图。一旦拍摄截图,就将其与我拥有的黄金图像进行比较,并相应地断言通过或失败。如果在拍摄屏幕截图时浏览器大小或系统分辨率不同,则会出现问题,因为这会影响图像的分辨率,这可能与我参考的黄金图像的分辨率不同。这两个图像都相同,但像素可能随浏览器大小或系统更改而变化。

那么有没有办法在selenium中使用java比较两个图像而不使用像素比较?

3 个答案:

答案 0 :(得分:0)

您可以使用Facebook的Huxley或BBC的Wraith,两者都是开源工具。 Wraith Selenium整合了Selenium和Wraith。您可以阅读此post以获取更多信息

答案 1 :(得分:0)

您想要使用像素比较,而不是拍摄可能大小不同的屏幕截图,将实际图像与黄金图像进行比较。流程将导航到页面,从IMG标记中获取SRC值并下载该文件。将下载的文件与黄金映像进行比较。

以下是一些下载Google徽标的示例代码。

WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://www.google.com");
String s = driver.findElement(By.id("hplogo")).getAttribute("src");
URL url = new URL(s);
System.out.println(url);
BufferedImage bufImgOne = ImageIO.read(url);
ImageIO.write(bufImgOne, "png", new File("test.png"));

通过下载图像,您可以稍后在验证失败时手动验证图像。如果您不想下载它,您可以跳过write()步骤并进行比较(取决于您的像素比较代码的编写方式)。

答案 2 :(得分:0)

这里的关键是分辨率,您必须确保基本“黄金”图像和您在测试期间捕获的图像的分辨率相同。

  1. 将浏览器窗口的大小设置为固定大小,例如(1920x1080),
  2. 以该分辨率制作所有屏幕截图,
  3. 在测试过程中:在每次图像比较之前,如果不是,请暂时更改窗口大小是否为(1920x1080),
  4. 截图,
  5. 将图片与原始“金色” img进行比较
  6. 使窗口最大化
  

其他解决方案是捕获单个WebElement的屏幕截图,而不是   比整个页面要多,因为WebElement通常是分辨率   独立的。