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
}