Take screenshot for any method failure - @Test/@BeforeClass/@AfterMethod

41 views
Skip to first unread message

garvita girotra

unread,
Jun 29, 2020, 12:31:44 PM6/29/20
to Selenium Users
Hi,

 I need to take screenshot in case of any exception or error in any method of framework - @Test/@BeforeClass/@AfterMethod

Current working :
TakeScreenshot method is in Browser class :

private final ThreadLocal<WebDriver> driver = new ThreadLocal<>();

public void setDriver(){
driver.set(DriverFactory.getInstance());
}

public WebDriver getDriver() {
return driver.get();
}

public byte[] takeScreenShot(String name) {
    String filename = makeScreenShotFileName(name); // return file name with date and time format
    String path = getRelativePath(filename); // directory path to save screenshots
    File screenShot = ((TakesScreenshot) getDriver())
            .getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(screenShot, new File(path));
    logger.info("Taking Screenshot of {} {}", getDriver().getCurrentUrl(), filename);
    return ((TakesScreenshot) getDriver()).getScreenshotAs(
            OutputType.BYTES);


All test classes extend BaseRun class. After each @AfterTest, take screenshot if test is failed :
@AfterMethod(alwaysRun = true)
protected void screenShotIfFail(ITestResult result) {
    if (!result.isSuccess()) {
        browser.takeScreenShot(result.getMethod());
    }
}

Driver is instantiated in DriverFactory class:
public WebDriver getDriver() {
    return setupDriver(); // Returns driver instance based on browser type
}


Mark Collin

unread,
Jun 30, 2020, 5:03:57 AM6/30/20
to Selenium Users
Reply all
Reply to author
Forward
0 new messages