Capture Screen Shot on Failure Test cases using TestNG.
Hi guys in this post we are going to see, how to capture ScreenShot on Failure Test cases using TestNG.
Taking Screenshot on the failure is very important to understand the Bug clearly to the manual Testers and developers.
Scenarios for Testcase Failures:
- Unable to find elements in the Webpages
- Timeout to finding Webelements.
- Assertion Failure
- Application Error
In this post we are going to see how this going to work in action.
In this Example we are going to forcefully fail the testcase by Asserting the title.(Giving the wrong Title)
Steps:
- We are creating a new class to capture ScreenShots alone.
import java.io.File;
import java.io.IOException;
import javax.print.attribute.standard.MediaSize.Other;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
public class CaptureScreenshot {
public static void takescreenshot(WebDriver driver,String Screenshotname) throws IOException
{
TakesScreenshot takescreenshot=(TakesScreenshot)driver;
File source=takescreenshot.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(source, newFile("./Screenshots/"+Screenshotname+".png"));
System.out.println("Screenshot Taken Successfully!!!!");
}
}
This class will just capture the screenshots by calling this Method in Test class
CaptureScreenshot.takescreenshot(driver, "Titlefailed");
2. Create a new Class for the Test.
3. On BeforeTest annotation Write code to Open Browser and Navigate to http:\\automationplace.blogspot.com
@BeforeTest
public void Setup()
{
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http:\\automationplace.blogspot.com");
//Make testcase fail by checking the Title
}
4. On the @Test annotation, Just verify the title (Here am forcefully failing the Testcase by giving wrong title on Expected String in Assert.equal method)
String ExpectedTitle="Automation";
forcefully failing the Testcase by giving wrong title on the ExpectedTitle.
@Test
public void verifytitle()
{
String ActualTitle=driver.getTitle();
System.out.println(ActualTitle);
//Removed "Place" string from Title to fail testcase
Assert.assertEquals(ActualTitle, ExpectedTitle);
}
5. Capture ScreenShot on the @AfterMethod,
Note :
1. We will use ITestResult Interface which will provide us the test case execution status and test case name.
2.@AfterMethod is another annotation of TestNG which will execute after evert test execution whether test case pass or fail @AfterMethod will always execute.
@AfterMethod
public void TearDown(ITestResult result) throws IOException
{
//If the Testcase fail then only it enters to if condition block
//.getStatus will return Test "Pass" or "Fail"
System.out.println("Testcase status is"+result.getStatus());
System.out.println("Iresult status is"+result.FAILURE);
if(result.FAILURE == result.getStatus())
{
//Now we need to capture Screenshot
//use CaptureScreenshot Class to Take Screenshot
CaptureScreenshot.takescreenshot(driver, "Titlefailed");
}
driver.quit();
}
1.If the Testcase fail then only it enters to if condition block
2.getStatus will return Test "Pass" or "Fail"
It will Store ScreenShot on the Project folder like this
Source Code:
Class to take ScreenShot: CreateScreenShot.java
import java.io.File;
import java.io.IOException;
import javax.print.attribute.standard.MediaSize.Other;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
public class CaptureScreenshot {
public static void takescreenshot(WebDriver driver,String Screenshotname) throws IOException
{
TakesScreenshot takescreenshot=(TakesScreenshot)driver;
File source=takescreenshot.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(source, newFile("./Screenshots/"+Screenshotname+".png"));
System.out.println("Screenshot Taken Successfully!!!!");
}
}
Class for the Testcase :FailedTestCase.java
import java.io.IOException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class FailedTestcase {
WebDriver driver;
String ExpectedTitle="Automation";
@BeforeTest
public void Setup()
{
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http:\\automationplace.blogspot.com");
//Make testcase fail by checking the Title
}
//Failed Testcase
@Test
public void verifytitle()
{
String ActualTitle=driver.getTitle();
System.out.println(ActualTitle);
//Removed "Place" string from Title to fail testcase
Assert.assertEquals(ActualTitle, ExpectedTitle);
}
@AfterMethod
public void TearDown(ITestResult result) throws IOException
{
//If the Testcase fail then only it enters to if condition block
//.getStatus will return Test "Pass" or "Fail"
System.out.println("Testcase status is"+result.getStatus());
System.out.println("Iresult status is"+result.FAILURE);
if(result.FAILURE == result.getStatus())
{
//Now we need to capture Screenshot
//use CaptureScreenshot Class to Take Screenshot
CaptureScreenshot.takescreenshot(driver, "Titlefailed");
}
driver.quit();
}
}
----------------------------------------------------------------------------------------------------
package test;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.internal.selenesedriver.TakeScreenshot;
public class takingscrshot {
public static void main(String[] args) throws IOException{
WebDriver driver= new FirefoxDriver();
driver.get("https://www.google.com/");
File scrFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("C:\\Local Disk D_9220122129\\tmp.jpg"));
}
}
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.internal.selenesedriver.TakeScreenshot;
public class takingscrshot {
public static void main(String[] args) throws IOException{
WebDriver driver= new FirefoxDriver();
driver.get("https://www.google.com/");
File scrFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("C:\\Local Disk D_9220122129\\tmp.jpg"));
}
}
Thats it..Have a great day.
Thankyou!!!!
Comments
Post a Comment