ashot icon indicating copy to clipboard operation
ashot copied to clipboard

ignoreElements not working

Open mayurbidkar opened this issue 2 years ago • 0 comments

Please check below snippet of code:

public void verifyMapLayout() throws IOException { String ignoreRefresh = "time[title]"; String alertCritical = "div[class*='bg-critical']"; String alertError = "div[class*='bg-error']"; String alertWarning = "div[class*='bg-warning']"; String alertSdt = "div[class*='bg-sdt']"; String imgSrc = "img[id='companyLogo']"; String canvasXpath = "//div[contains(@class,'MapContainer__TopologyMapWrapper')]"; String canvasCss = "div.yfiles-svgpanel"; String mapGroupXpath = "//span[@class='group-name' and text()='mapTest']"; String mapLinkXpath = "//span[@class='group-name' and text()='mapTest']/../../../../div[@class='group-container']//tbody/tr[@data-name='MapHierachical']//a"; uiCommonLib.waitForElementVisible(driver.findElement(By.xpath(mapGroupXpath))); uiCommonLib.click(driver.findElement(By.xpath(mapGroupXpath))); uiCommonLib.waitForElementVisible(driver.findElement(By.xpath(mapLinkXpath))); uiCommonLib.click(driver.findElement(By.xpath(mapLinkXpath))); uiCommonLib.waitForElementVisible(driver.findElement(By.xpath(canvasXpath))); WebElement mapElement = driver.findElement(By.xpath(canvasXpath)); Dimension d = mapElement.getSize(); logger.info("height:"+ d.height+" width: "+d.width);

    Set<By> ignoredElements = new HashSet<>();
    WebElement elementRefresh = driver.findElement(By.cssSelector(ignoreRefresh));
    Point p = elementRefresh.getLocation();
    ignoredElements.add(By.cssSelector(ignoreRefresh));
    ignoredElements.add(By.cssSelector(alertWarning));
    ignoredElements.add(By.cssSelector(alertSdt));
    ignoredElements.add(By.cssSelector(alertCritical));
    ignoredElements.add(By.cssSelector(alertError));
    ignoredElements.add(By.cssSelector(imgSrc));
    Set<Coords> ignoredCords = getCords(ignoredElements, driver);
    String layout = "Hierarchical (top down)";
    Screenshot actualScreenShot = takeScreenAshot(driver,"Hierarchical_top_down", ignoredElements);

    BufferedImage expectedImage = ImageIO.read(new File(getUsersProjectRootDirectory(osName)+"/ExpectedImages/"+layout+".png"));

    // Create ImageDiffer object and call method makeDiff()
    Screenshot expectedScreenShot = new Screenshot(expectedImage);
    expectedScreenShot.setIgnoredAreas(actualScreenShot.getIgnoredAreas());
    expectedScreenShot.setCoordsToCompare(actualScreenShot.getCoordsToCompare());
    ImageDiffer imgDiff = new ImageDiffer();
    ImageDiff diff = imgDiff.makeDiff(actualScreenShot.getImage(), expectedScreenShot.getImage());

    if (diff.hasDiff()) {
        makeDiffImage(actualScreenShot.getImage(), expectedScreenShot.getImage(), "Hierarchical (top down)", diff);
        softAssert.assertFalse(diff.hasDiff(), "images are not same");
    } else {
        logger.info("images are same");
    }

    softAssert.assertAll();

}

// i have used it for to get cords but i am not using it as of now public static Set<Coords> getCords(Set<By> ignoredElements, WebDriver driver) { Set<Coords> ignoredCoords = new HashSet<>(); for (By locator : ignoredElements) { Point point = driver.findElement(locator).getLocation(); Dimension dimension = driver.findElement(locator).getSize(); ignoredCoords.add(new Coords(point.getX(), point.getY(), dimension.getWidth(), dimension.getHeight())); } return ignoredCoords; }

public Screenshot takeScreenAshot(WebDriver driver, String layout, Set<By> ignoredElements) { String destination = null; ImageIO.setUseCache(false); AShot shooter = new AShot().shootingStrategy(ShootingStrategies.simple()). ignoredElements(ignoredElements).coordsProvider(new WebDriverCoordsProvider()); Screenshot screenshot= shooter.takeScreenshot(driver); if (pathForStoringScreenshots == null) { pathForStoringScreenshots = getUsersProjectRootDirectory(osName) + "/Screenshots/"; } try { destination = pathForStoringScreenshots + "/" + layout + ".png"; ImageIO.write(screenshot.getImage(), "png", new File(destination)); // FileUtils.copyFile(scrFile, new File(destination)); } catch (Exception e) { logger.error("Unable to save Screenshot due to error :: ", e); } return screenshot; }

public void makeDiffImage(BufferedImage actualImage, BufferedImage expectedImage, String layout, ImageDiff diff) throws IOException {
    String destination = null;
    if (pathForStoringScreenshots == null) {
        pathForStoringScreenshots = getUsersProjectRootDirectory(osName) + "/Screenshots/Difference/";
    }
    try {
        destination =
                pathForStoringScreenshots + "/" + "diff_" + layout
                        + ".png";
        BufferedImage diffImage = diff.getMarkedImage();
        ImageIO.write(diffImage, "png", new File(destination));
    } catch (Exception e) {
        logger.error("Unable to save Screenshot due to error :: ", e);
    }
}

But still i am getting difference image even if i added list of ignored elements with css values. Tried every way to achieve comparison but Ashot not doing it in correct way. Please let me know thing i am missing. need help for this. Thanks.

mayurbidkar avatar Apr 29 '22 07:04 mayurbidkar