Bird
Raised Fist0
Selenium Javatesting~10 mins

Screenshot attachment on failure in Selenium Java - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test opens a webpage, tries to find a button, clicks it, and verifies the page title. If the test fails, it takes a screenshot and saves it for debugging.

Test Code - JUnit with Selenium WebDriver
Selenium Java
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 org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.IOException;

public class ScreenshotOnFailureTest {
    private WebDriver driver;

    @Before
    public void setUp() {
        driver = new ChromeDriver();
    }

    @Test
    public void testButtonClickAndTitle() throws IOException {
        driver.get("https://example.com");
        WebElement button = driver.findElement(By.id("start-button"));
        button.click();
        String title = driver.getTitle();
        try {
            Assert.assertEquals("Expected Page Title", title);
        } catch (AssertionError e) {
            takeScreenshot("failure_screenshot.png");
            throw e;
        }
    }

    private void takeScreenshot(String fileName) throws IOException {
        File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        FileHandler.copy(srcFile, new File(fileName));
    }

    @After
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}
Execution Trace - 8 Steps
StepActionSystem StateAssertionResult
1Test starts and Chrome browser opensChrome browser window is open and ready—PASS
2Navigates to https://example.comBrowser displays the example.com homepage—PASS
3Finds element with id 'start-button'Button element is located on the page—PASS
4Clicks the 'start-button'Page reacts to button click, possibly navigates or updates—PASS
5Gets the page title after clickPage title is retrieved—PASS
6Checks if page title equals 'Expected Page Title'Title is compared to expected stringAssert.assertEquals("Expected Page Title", title)FAIL
7On assertion failure, takes screenshot and saves as 'failure_screenshot.png'Screenshot file is created in test folder—PASS
8Test ends and browser closesBrowser window is closed—PASS
Failure Scenario
Failing Condition: Page title does not match 'Expected Page Title' after clicking the button
Execution Trace Quiz - 3 Questions
Test your understanding
What happens immediately after the test detects the page title is incorrect?
AA screenshot is taken and saved
BThe browser closes immediately
CThe test retries clicking the button
DThe test ignores the failure and continues
Key Result
Taking a screenshot only on test failure helps quickly understand what went wrong without cluttering storage with unnecessary images.

Practice

(1/5)
1. What is the main purpose of taking a screenshot on test failure in Selenium Java?
easy
A. To automatically fix the test errors
B. To speed up the test execution
C. To visually capture the state of the application at failure
D. To reduce the size of the test report

Solution

  1. Step 1: Understand the role of screenshots in testing

    Screenshots help testers see what the application looked like when a test failed.
  2. Step 2: Identify the benefit of visual evidence

    This visual evidence helps diagnose issues faster and more clearly than logs alone.
  3. Final Answer:

    To visually capture the state of the application at failure -> Option C
  4. Quick Check:

    Screenshot = Visual failure evidence [OK]
Hint: Screenshots show what failed visually, not fix or speed tests [OK]
Common Mistakes:
  • Thinking screenshots fix errors automatically
  • Believing screenshots speed up tests
  • Assuming screenshots reduce report size
2. Which Selenium interface is used to capture screenshots in Java?
easy
A. WebDriver
B. JavascriptExecutor
C. Alert
D. TakesScreenshot

Solution

  1. Step 1: Recall Selenium interfaces for screenshots

    The TakesScreenshot interface provides the method to capture screenshots.
  2. Step 2: Differentiate from other interfaces

    Other interfaces like WebDriver control browser, Alert handles popups, and JavascriptExecutor runs JS scripts.
  3. Final Answer:

    TakesScreenshot -> Option D
  4. Quick Check:

    TakesScreenshot = Capture screenshots [OK]
Hint: Use TakesScreenshot interface to capture images [OK]
Common Mistakes:
  • Using WebDriver directly for screenshots
  • Confusing Alert or JavascriptExecutor with screenshot capture
  • Not casting driver to TakesScreenshot
3. What will happen if you run this code snippet after a test failure?
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile, new File("screenshots/fail.png"));
medium
A. Compilation error due to missing cast
B. Screenshot saved as fail.png in screenshots folder
C. Runtime error because FileUtils is undefined
D. Screenshot saved but file name is random

Solution

  1. Step 1: Analyze the screenshot capture code

    The driver is cast to TakesScreenshot and screenshot saved as a file named "fail.png" in the "screenshots" folder.
  2. Step 2: Check for errors or randomness

    FileUtils.copyFile copies the screenshot correctly; file name is fixed as "fail.png" so no randomness.
  3. Final Answer:

    Screenshot saved as fail.png in screenshots folder -> Option B
  4. Quick Check:

    Code saves fixed-name screenshot file [OK]
Hint: Casting driver and copyFile saves fixed screenshot file [OK]
Common Mistakes:
  • Forgetting to cast driver to TakesScreenshot
  • Not importing or defining FileUtils
  • Expecting random file names without code for it
4. Identify the error in this code snippet for saving a screenshot on failure:
File srcFile = driver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile, new File("screenshots/error.png"));
medium
A. driver must be cast to TakesScreenshot before calling getScreenshotAs
B. FileUtils.copyFile method does not exist
C. OutputType.FILE is invalid for screenshots
D. File path must be absolute, not relative

Solution

  1. Step 1: Check method call on driver

    The getScreenshotAs method belongs to TakesScreenshot, so driver must be cast before calling it.
  2. Step 2: Verify other parts

    FileUtils.copyFile exists and OutputType.FILE is correct. Relative paths are allowed if folder exists.
  3. Final Answer:

    driver must be cast to TakesScreenshot before calling getScreenshotAs -> Option A
  4. Quick Check:

    Cast driver to TakesScreenshot before screenshot [OK]
Hint: Always cast driver to TakesScreenshot before getScreenshotAs [OK]
Common Mistakes:
  • Calling getScreenshotAs directly on WebDriver
  • Assuming OutputType.FILE is wrong
  • Thinking relative paths cause errors
5. You want to attach a screenshot to your test report only when a test fails. Which approach correctly implements this in Selenium Java with TestNG?
@AfterMethod
public void tearDown(ITestResult result) {
  if (result.getStatus() == ITestResult.FAILURE) {
    File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    File dest = new File("screenshots/" + result.getName() + ".png");
    FileUtils.copyFile(src, dest);
    // Attach dest to report here
  }
  driver.quit();
}
hard
A. This code saves screenshot only on failure and attaches it correctly
B. Screenshot is saved on every test, not just failures
C. FileUtils.copyFile will throw error without try-catch
D. result.getName() returns null, so file name is invalid

Solution

  1. Step 1: Check condition for failure

    The code checks if test status is FAILURE before taking screenshot, so it runs only on failures.
  2. Step 2: Verify screenshot saving and naming

    Screenshot saved with test method name, which is valid. Attaching to report is indicated as a comment.
  3. Step 3: Confirm no errors in logic

    FileUtils.copyFile may throw IOException but typically handled or declared; this snippet focuses on logic correctness.
  4. Final Answer:

    This code saves screenshot only on failure and attaches it correctly -> Option A
  5. Quick Check:

    Screenshot on failure only with correct naming [OK]
Hint: Use ITestResult.FAILURE check to save screenshots only on failure [OK]
Common Mistakes:
  • Taking screenshots regardless of test result
  • Not handling exceptions from file operations
  • Assuming getName() returns null
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard