作为我们持续集成系统的一部分,我正在实施一个系统,以便在每次提交后比较项目每个页面的屏幕截图。
我正在使用JUnit和Selenium来达到这个目的。它工作得很好,但有时完全相同的页面会导致截图略有不同。
我首先比较屏幕截图的MD5哈希值,然后计算哈希值不匹配时不同像素的数量。在实践中,我经常会得到超过5000个像素,这些像素对于完全相同的页面是不一样的(分辨率是1280x800)。差异出现在文本周围。
这是一张“差异”图片,其中突出显示不相同的像素:
(这是逐像素比较,其中diff被添加到RGB值)
精简代码:
File captured = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(captured, screenshot); // + exception handling
String oldMd5 = hashFile(reference); // previous version of this page
String newMd5 = hashFile(screenshot);
// then compare the hashes...
有什么想法吗?