seleniumselenium-webdriverscreenshot

How to capture the screenshot of a specific element rather than entire page using Selenium Webdriver?


Currently I'm trying to capture a screenshot using the Selenium WebDriver. But I can only obtain the whole page screen shot. However, what I wanted is just to capture a part of the page or perhaps just on specific element based on ID or any specific element locator. (For example, I wish to capture the picture with image id = "Butterfly")

Is there any way to capture a screenshot by selected item or element?


Solution

  • We can get the element screenshot by cropping entire page screenshot as below:

    driver.get("http://www.google.com");
    WebElement ele = driver.findElement(By.id("hplogo"));
    
    // Get entire page screenshot
    File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    BufferedImage  fullImg = ImageIO.read(screenshot);
    
    // Get the location of element on the page
    Point point = ele.getLocation();
    
    // Get width and height of the element
    int eleWidth = ele.getSize().getWidth();
    int eleHeight = ele.getSize().getHeight();
    
    // Crop the entire page screenshot to get only element screenshot
    BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),
        eleWidth, eleHeight);
    ImageIO.write(eleScreenshot, "png", screenshot);
    
    // Copy the element screenshot to disk
    File screenshotLocation = new File("C:\\images\\GoogleLogo_screenshot.png");
    FileUtils.copyFile(screenshot, screenshotLocation);