Latest post from this blog

How to Manage Test Execution Across Different Browsers and Environments (QA, UAT, Staging)

In real-time automation projects, test execution is never limited to a single browser or a single environment . Applications must be validated across multiple browsers (Chrome, Firefox, Edge) and multiple environments such as QA, UAT, and Staging before going live. A well-designed Selenium + Java + Cucumber automation framework should allow testers to switch browsers and environments easily without changing test scripts . This blog explains how to manage test execution efficiently across different browsers and environments using best practices followed in real projects. Why Multi-Browser and Multi-Environment Testing Is Important Different users use different browsers QA, UAT, and Staging environments have different configurations Bugs may appear only in specific environments or browsers Same test cases must be validated everywhere before production release Common Challenges Testers Face Hardcoded browser names and URLs Maintaining separate test scripts for each environment Browse...

How to take a screenshot in selenium

Introduction

To take a screenshot using Selenium in Java, you can use the TakesScreenshot interface.

TakesScreenshot interface in Selenium is used to capture screenshots of the current browser window. It provides the getScreenshotAs method, which allows you to obtain a screenshot and handle it as a file. 

Steps to Take a Screenshot:

Here’s a simplified way to take a screenshot using Selenium with Java:

1.Set Up WebDriver: Make sure you have the appropriate WebDriver (e.g., ChromeDriver for Chrome) and Selenium libraries set up in your project.

2.Initialize WebDriver: Instantiate the WebDriver for the browser you want to use and navigate to the webpage where you want to capture the screenshot.

// Use the driver for your chosen browser

WebDriver driver = new ChromeDriver(); 

// Navigate to the desired webpage

driver.get("https://example.com"); 

3.Cast WebDriver to TakesScreenshot: Selenium’s WebDriver interface does not include screenshot methods. You need to cast the WebDriver instance to the TakesScreenshot interface.

TakesScreenshot screenshot = (TakesScreenshot) driver;

4.Capture and Save Screenshot: Use the getScreenshotAs(OutputType.FILE) method to capture the screenshot, which returns a File object.

FileUtils.copyFile() from the Apache Commons IO library to copy the screenshot from the source file to the desired destination.

File screenshotFile = screenshot.getScreenshotAs(OutputType.FILE);

   File destinationFile = new File("screenshot.png");

   // Requires Apache Commons IO library

   FileUtils.copyFile(screenshotFile, destinationFile);

5.Handle Exceptions: Include error handling to manage any IOExceptions that might occur while saving the file.

   try {

       FileUtils.copyFile(screenshotFile, destinationFile);

   } catch (IOException e) {

       e.printStackTrace();

   }

6.Close the Browser: Always close the browser after the test to free up resources.

   driver.quit(); // Closes the browser


7.Take a Full Page Screenshot

import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.io.FileHandler;

import java.io.File;
import java.time.Duration;

public class Screenshot {

public static void main(String[] args) {
// Set the ChromeDriver executable path
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");

// Initialize WebDriver
WebDriver driver = new ChromeDriver();

try {
// Maximize the browser window
driver.manage().window().maximize();

// Open the URL
driver.get("https://example.com");

// Wait for the page to load
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

// Full-page screenshot
takeFullPageScreenshot(driver, "screenshots/full_page_screenshot.png");

// Screenshot of a specific element
WebElement element = driver.findElement(By.xpath("//E1")); // Replace with your element locator
takeElementScreenshot(element, "screenshots/element_screenshot.png");

// Save screenshot in Base64 format
saveScreenshotAsBase64(driver);

} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
} finally {
// Quit the browser
driver.quit();
}
}

// Method to take a full-page screenshot
public static void takeFullPageScreenshot(WebDriver driver, String filePath) {
try {
// Convert WebDriver instance to TakesScreenshot
TakesScreenshot screenshot = (TakesScreenshot) driver;

// Take the screenshot and save it as a file
File srcFile = screenshot.getScreenshotAs(OutputType.FILE);

// Save the screenshot to the specified location
FileHandler.copy(srcFile, new File(filePath));

System.out.println("Full-page screenshot saved at: " + filePath);
} catch (Exception e) {
System.out.println("Failed to take full-page screenshot: " + e.getMessage());
}
}

// Method to take a screenshot of a specific element
public static void takeElementScreenshot(WebElement element, String filePath) {
try {
// Capture screenshot of the specific element
File srcFile = element.getScreenshotAs(OutputType.FILE);

// Save the screenshot to the specified location
FileHandler.copy(srcFile, new File(filePath));

System.out.println("Element screenshot saved at: " + filePath);
} catch (Exception e) {
System.out.println("Failed to take element screenshot: " + e.getMessage());
}
}

// Method to save a screenshot in Base64 format
public static void saveScreenshotAsBase64(WebDriver driver) {
try {
// Take the screenshot and save it as Base64
String base64Screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BASE64);

System.out.println("Screenshot in Base64 format: " + base64Screenshot);
} catch (Exception e) {
System.out.println("Failed to save screenshot as Base64: " + e.getMessage());
}
}
}


Comments

Popular posts from this blog

How to Manage Test Execution Across Different Browsers and Environments (QA, UAT, Staging)

Purpose of the StepData Class in Selenium + Java Cucumber Automation Framework

Ensuring Thread Safety in Parallel Test Execution with Selenium, Cucumber, and Java