我想在截屏时忽略一个元素。因此,在比较实际图像和预期图像时,我可以摆脱该特定区域。
我尝试了两种方法。但两者都没有工作。
第一种方法:在截屏时添加要忽略的元素
AShot test = new AShot().addIgnoredElement(By.xpath("//body'"));
Screenshot screenshot = test.coordsProvider(new WebDriverCoordsProvider()).takeScreenshot(driver);
ImageIO.write(screenshot.getImage(), "PNG", new File("/filepath "));
BufferedImage expectedImage = ImageIO.read(new File("/filepath "));
BufferedImage actualImage = screenshot.getImage();
ImageDiffer imgdiffer = new ImageDiffer();
ImageDiff imgdiff = imgdiffer.makeDiff(expectedImage, actualImage);
if (imgdiff.hasDiff()) {
BufferedImage diffImage = imgdiff.getMarkedImage();
ImageIO.write(diffImage, "PNG", new File("/filepath "));
Assert.assertTrue("There is a difference in image.", imgdiff.hasDiff());
}
第二种方法:是对页面进行截图,然后将忽略区域设置为实际截图和预期截图。最后比较两张图。
By ignored_element = new By.ByCssSelector("body");
Set<By> ignored_elements = new HashSet<By>() {{
add(ignored_element);
}};
Screenshot screenshot = new AShot()
.shootingStrategy(ShootingStrategies.simple())
.coordsProvider(new WebDriverCoordsProvider())
.takeScreenshot(driver);
screenshot.setIgnoredAreas(getCoords(ignored_elements));
ImageIO.write(screenshot.getImage(), "PNG", new File("/filepath"));
BufferedImage expectedImage = ImageIO.read(new File("/filepath "));
BufferedImage actualImage = screenshot.getImage();
Screenshot expectedscreen = new Screenshot(expectedImage);
Screenshot actualscreen = new Screenshot(actualImage);
expectedscreen.setIgnoredAreas(screenshot.getIgnoredAreas());
expectedscreen.setCoordsToCompare(screenshot.getCoordsToCompare());
ImageDiffer imgdiffer = new ImageDiffer();
ImageDiff imgdiff = imgdiffer.makeDiff(expectedscreen, actualscreen);
if (imgdiff.hasDiff()) {
BufferedImage diffImage = imgdiff.getMarkedImage();
ImageIO.write(diffImage, "PNG", new File("/filepath "));
Assert.assertTrue("There is a difference in image.", imgdiff.hasDiff());
}
}
public static Set<Coords> getCoords(Set<By> ignoredElements) {
WebDriver driver = getDriver();
Set<Coords> ignoredCoords = new HashSet<>();
for (By locator : ignoredElements) {
WebElement element = driver.findElement(locator);
Point point = element.getLocation();
Dimension dimension = element.getSize();
ignoredCoords.add(new Coords(point.getX(), point.getY(), dimension.getWidth(), dimension.getHeight()));
}
return ignoredCoords;
}