0

我想在截屏时忽略一个元素。因此,在比较实际图像和预期图像时,我可以摆脱该特定区域。

我尝试了两种方法。但两者都没有工作。

第一种方法:在截屏时添加要忽略的元素

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;

    }
4

0 回答 0