我目前在Selenium WebDriver工作,在自动化过程中比较两个图像。目前我正在使用像素比较,但问题是如果浏览器大小发生变化或系统不同,我运行自动化。
我必须比较两个图像,一个是已保存在某个位置的黄色图像,另一个是在自动化过程中拍摄的屏幕截图。一旦拍摄截图,就将其与我拥有的黄金图像进行比较,并相应地断言通过或失败。如果在拍摄屏幕截图时浏览器大小或系统分辨率不同,则会出现问题,因为这会影响图像的分辨率,这可能与我参考的黄金图像的分辨率不同。这两个图像都相同,但像素可能随浏览器大小或系统更改而变化。
那么有没有办法在selenium中使用java比较两个图像而不使用像素比较?
答案 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)
这里的关键是分辨率,您必须确保基本“黄金”图像和您在测试期间捕获的图像的分辨率相同。
其他解决方案是捕获单个WebElement的屏幕截图,而不是 比整个页面要多,因为WebElement通常是分辨率 独立的。