Your ultimate guide

How to Take Screenshots in Selenium using getScreenshotAs()

Taking screenshots during test execution is essential in automation testing. Selenium provided the getScreenshotAs() method to capture the current webpage and save it as an image file. This is useful for debugging, reporting, and identifying issues in test cases.

In this post, we'll cover:
  • What is getScreenshotAs() ?
  • How to use it in Selenium WebDriver
  • Syntax and different ways to implement it
  • A complete example code



What is getScreenshotAs()?
    The getScreenshotAs() method is part of the TakeScreenshot interface in Selenium. It allows us to capture a screenshot of the current webpage and store it as a file.

Why is it useful?
  • Helps in debugging test failures
  • Useful for generating reports with screenshots
  • Captures visual proof of test execution



How to Use getScreenshotAs() in Selenium
To take a screenshot in Selenium, follow these steps:
  1. Cast the WebDriver instance to TakesScreenshot
  2. Use getScreenshotAs() method to capture the screenshot
  3. Save the captured screenshot to a specified location using FileHandler.copy()

Syntax:
Method 1: Using an explicit TakesScreenshot reference

    TakesScreenshot tshot = (TakesScreenshot)driver;
    File src = tshot.getScreenshotAs(OutputType.FILE);
    File dest = new File("destination path\\filename.jpg");
    FileHandler.copy(src, dest);

Method 2: Using a one-liner approach

File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    File dest = new File("destination path\\filename.jpg");
    FileHandler.copy(src, dest);

Both methods achieve the same result. The second method is more compact.



Complete Example: Taking a Screenshot Using EdgeDriver
Below is a complete Java program that launches Microsoft Edge, navigates to a sample website, captures a screenshot, and saves it to a specified location.

import java.io.File;
import java.io.IOException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.TakeScreenshot;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.io.FileHandler;

public class TScreenshot {
    public static void main(String[] args) throws IOException {
        // Set path for Edge WebDriver
        System.setProperty("webdriver.edge.driver",".//edgedriver.exe");

        // Initialize Edge WebDriver
        WebDriver driver = new EdgeDriver();

        // Open a Webpage
        String url = "https://testingcolleges.blogspot.com";
        driver.get(url);

        // Take a screenshot
        TakesScreenshot screenshot = (TakesScreenshot)driver;
        File source = screenshot.getScreenshotAs(OutputType.FILE);

        // Define destination file path
        File destination = new File("E:\\123.jpg");

        // Copy the screenshot to the destination
        FileHandler.copy(source, destination);

        // Close the browser
        driver.quit();

        System.out.println("Screenshot saved successfully at: " + destination.getAbsolutePath());
    }
}


Explanation of the Code
1. Setting Up WebDriver
System.setProperty("webdriver.edge.driver", ".//edgedriver.exe");
WebDriver driver = new EdgeDriver();
  • Sets the system property to specify the Edge WebDriver location.
  • Creates a new instance of the EdgeDriver.

2. Opening a Webpage
String url = "https://testingcolleges.blogspot.com";
driver.get(url);
  • Loads the given URL in the browser.

3. Taking the Screenshot
TakesScreenshot screenshot = (TakesScreenshot) driver;
File source = screenshot.getScreenshotAs(OutputType.FILE);
  • Casts the driver object to TakesScreenshot.
  • Captures a screenshot and stores it in a temporary file.

4. Saving the Screenshot
File destination = new File("E:\\123.jpg");
FileHandler.copy(source, destination);
  • Define the location where the screenshot will be saved.
  • Copies the captured screenshot to the specified file path.

5. Closing the Browser
driver.quit();
  • Closes the browser session after execution.

6. Displaying Success Message
System.out.println("Screenshot saved successfully at: " + desination.getAbsolutePath());
  • Print a message with the exact file path of the saved screenshot.




Common Errors and Fixes
1. IllegalStateException: The path to the driver executable must be set
   Cause: The WebDriver path is incorrect or not set properly.
   Solution: Ensure the correct WebDriver executable path is provided:

System.setProperty("webdriver.edge.driver", "C:\\Path\\To\\edgedriver.exe");

2. IOException: The system cannot find the file specified
   Cause: The destination folder does not exist.
   Solution:  Ensure the directory exists before saving the file.

3. UnhandledAlertException: Modal dialog present.
   Cause: A popup or alert is blocking the screenshot.
   Solution: Handle alerts before taking a screenshot:
    Alert alert = driver.switchTo().alert();
    alert.accept();   // or alert.dismiss(); 



Conclusion
Taking screenshots in Selenium is simple and highly useful for debugging and reporting. Using getScreenshotAs(), you can easily capture and store screenshots during test execution.

✅ Key Takeaways:
  • getScreenshotAs() is used to capture screenshots in Selenium.
  • You can use either explicit casting or a one-liner approach.
  • Always handle errors like missing WebDriver or invalid file path.

Now, try implementing this in your Selenium tests and enhance your automation reporting with screenshots! 🚀


No comments:

Post a Comment