Selenium: java.awt.image.RasterFormatException: (y + height) is outside of Raster when using element size and location
-
The element image you are cropping is not present in the screenshot taken by the code. If you put debug and print full screen shot path and manually view it then you can see desired element to be cropped from image is not present in it.
-
So first we need to scroll page to bring desired element into view and then take the screenshot. Then we need to crop the image based on element's location.
-
Also,
Point
class is not very reliable to give element's exact location.
@Test public void subImageTest() throws InterruptedException, IOException { driver.get("http://www.reyo.cn/"); ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,600)"); File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); WebElement element=driver.findElement(By.xpath("//*[@id='PopularPosts1']")); System.out.println(element.getSize()); // Take full screen screenshot BufferedImage fullImg = ImageIO.read(screenshot); ImageIO.read(screenshot).getHeight() System.out.println(fullImg.getHeight()); System.out.println(fullImg.getWidth()); Point point = element.getLocation(); int elementWidth = element.getSize().getWidth(); int elementHeight = element.getSize().getHeight(); // Now no exception here BufferedImage elementScreenshot= fullImg.getSubimage(220, 170,elementWidth+150,elementHeight+100); // crop the image to required ImageIO.write(elementScreenshot, "png", screenshot); FileUtils.copyFile(screenshot, new File("C:\\reyo\\mostread_screenshot.png"));//path to save screen shot }