seleniumwebdrivercaptureregion

JAVA Selenium Webdriver Capturing wrong region in the screenshot


I am using selenium Web Driver(Java) to automate our web application. I need to capture and compare the each icon of the application in all browsers.

For that first I've opened the application in Firefox and captured icons images with its xpath and then saving them at a particular path. Later comparing the saved images when the application opened in another browser.

For this I have used the below code to capture the images, but the element image is not capturing, some unknown region in the screen is saving.

Please help, how to get the correct image of the element.

File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage  fullImg = ImageIO.read(screenshot);
Point point = x.getLocation();
//Get width and height of the element
int eleWidth = x.getSize().getWidth();
int eleHeight = x.getSize().getHeight();
Rectangle rect = new Rectangle(point.getX(),point.getY(),eleWidth, eleHeight);
//Crop the entire page screenshot to get only element screenshot
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), rect.width, rect.height);
ImageIO.write(eleScreenshot, "png", screenshot);
//Copy the element screenshot to disk
FileUtils.copyFile(screenshot, new File("E:\\ICONS\\Icon1.jpg"));

Solution

  •     driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='CWinBtn']")));
        WebElement ele =driver.findElement(By.xpath("//*[@id='CCDLinkedformToolbar_cmdPrint']"));
        try{         
        File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        BufferedImage  fullImg = ImageIO.read(screenshot);
        Point point = ele.getLocation();
        int eleWidth = ele.getSize().getWidth();
        int eleHeight = ele.getSize().getHeight();
        BufferedImage eleScreenshot= fullImg.getSubimage(point.getX()+30, 95, eleWidth, eleHeight);
        ImageIO.write(eleScreenshot, "png", screenshot);
        FileUtils.copyFile(screenshot, new File("E:\\ ICONS\\Icon1.png"));
        }
        catch(Exception e){
             e.printStackTrace();
        }
    

    Changes that i have made to my previous code are, added value to X coordinate and passed static value to Y coordinate, as per my application resolution.