Being able to take screenshot is a huge plus point in Selenium. I absolutely love this feature. If we use the getScreenshotAs( ) function to take a screenshot, it takes screenshot of full page. In many situations, we just want the screenshot of a particular element.
The approach followed is that we take the screenshot of the full page and then crop it using two dimensions-height and width of the element we want to take the screenshot of.
public class Screenshot {
private String baseUrl;
private WebDriver driver;
@Test
public void f() throws IOException,InterruptedException {
driver.get(baseUrl);
//take screenshot of the page and save it as FILE type
File scrshot=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//copy it in D:\\
FileUtils.copyFile(scrshot, new File("D:\\screenshot.png"));
//find the specific webelement whom we want the screenshot
WebElement e=driver.findElement(By.xpath("//*[@id='post-22532']/div[1]/div[2]/div/div/p[25]/a/img"));
Point p= e.getLocation();
//get height and width of element
int h=e.getSize().getHeight();
int w=e.getSize().getWidth();
System.out.println(h);
System.out.println(w);
BufferedImage img=ImageIO.read(scrshot);
//crop image using the height and width dimensions
BufferedImage finalImg=img.getSubimage(p.getX(), p.getY(), w, h);
ImageIO.write(finalImg, "png", scrshot);
File f1=new File("D:\\element.png");
FileUtils.copyFile(scrshot, f1);
}
@BeforeTest
public void beforeTest() {
driver= new FirefoxDriver();
baseUrl="http://www.toolsqa.com/selenium-webdriver/headless-browser-testing-selenium-webdriver/";
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@AfterTest
public void afterTest() {
driver.quit();
}
}
Screenshots
This is the element we want the screenshot of

After running the program, we get the screenshot in my D:\\ drive.
