chetan
chetan

Reputation: 65

Java-Selenium : TakesScreenshot size issue

I have created 'takescreenshot' reusable method to capture screenshot and have been calling wherever I need it.

however I am facing one strange issue here. Every time this function is called the captured image size keeps increasing e.g 252K -> 278K -> 310K -> 400K ...

These captured images I am using in ExtentReport. Also apart from selenium session image, I do see a black background image being captured not sure where it is coming from.

method code is as below:

public static void takescreenshot(ExtentTest Test,String Status){
    Date d=new Date();
    String CurrentTimeStamp=d.toString().replace(":", "_").replace(" ", "_");

    File scrFile =((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(scrFile, new File(CurrentTimeStamp+".png"));

    if(Status.equals("pass")){
        Test.log(LogStatus.PASS, "snapshot below:-"+CurrentTimeStamp+".png"));


    }else if(Status.equals("fail")){    
        Test.log(LogStatus.FAIL, "snapshot below:-"+CurrentTimeStamp+".png"));

    }
}

if I hardcode some existing image in extentreport code then everything works fine.

Has anyone come across this issue ever.

Upvotes: 0

Views: 634

Answers (1)

AswathyPrasad
AswathyPrasad

Reputation: 361

I had written a code to capture screenshot of elements which works fine. May be this will help you. I don't know what Extendreport is, so can't help you there.

  public static void takeElementScreenshot(WebDriver driver, WebElement element){
            try{

                // 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 = element.getLocation();

                // Get width and height of the element
                int eleWidth = element.getSize().getWidth();
                int eleHeight = element.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("D:\\Screenshot.png");
                FileUtils.copyFile(screenshot, screenshotLocation);
                }
                catch(Exception e){

                } 
        }

Upvotes: 1

Related Questions