Adding screen captures created by a JUnit Selenium test to execution results
When a JUnit Selenium test is executed it can create screen captures of the browser session to show error conditions. You can include these screen captures in the execution result of the testcase or testsuite run for later viewing.
About this task
Note: To use commas to separate values in
the Java System Properties field, add single quotes to it. For example,
steps=JazzScenarioStep00_CustomSetup, tests='test01,test02,test03,test04'.
At the end of each
JUnit
Selenium test executed, the directory specified by
"selenium.screenshot.dir" is searched for image files (.png, .jpg, .jpeg, .gif, .tif, .bmp). If any
are found, file attachments are created on the Engineering Test Management server, and references to those
file attachments are included in the execution result. Example
Note: You can not change the default location of the screenshot directory
that is specified by the Java System Properties field -
"selenium.screenshot.dir".
@Test
public void testWikipediaJUnit4_test1() throws Exception {
driver.get(baseUrl + "/");
driver.findElement(By.id("searchInput")).clear();
driver.findElement(By.id("searchInput")).sendKeys("blueberries");
takeScreenShot("blueberry2.png"); // Capture screenshot of current state
driver.findElement(By.name("go")).click();
driver.findElement(By.cssSelector("p> i> a[title=\"Vaccinium\"]")).click();
takeScreenShot("vaccinium2.png"); // Capture screenshot of current state
driver.findElement(By.linkText("huckleberry")).click();
takeScreenShot("huckleberry2.png"); // Capture screenshot of current state
}
private void takeScreenShot(String fname) throws Exception {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
String imageFileDir = System.getProperty("selenium.screenshot.dir");
if (imageFileDir == null)
imageFileDir = System.getProperty("java.io.tmpdir");
FileUtils.copyFile(scrFile, new File(imageFileDir, fname));
}
If you have multiple screen captures, the following sample JUnit code shows how to display each screen capture on separate lines.
import org.apache.commons.io.FileUtils;
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.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Reporter;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.AfterClass;
public class BrowseWikipedia {
public static WebDriver driver;
public Boolean shouldTheTestPass = false;
@BeforeClass
public static void setUp()throws Exception{
driver = new FirefoxDriver();
}
@Test
public void step01_HomePage() throws Exception{
listEnvironmentVariables();
driver.get("http://www.wikipedia.org/");
String i = driver.getCurrentUrl();
System.out.println(i);
BrowseWikipedia me = new BrowseWikipedia();
try{
me.takeScreenShot("Step-1.png",driver);}
catch(Exception e){
System.out.println("Problem, "+e.toString());}
}
@Test
public void step02_MainPage() throws Exception{
driver.findElement(By.linkText("English")).click();
BrowseWikipedia me = new BrowseWikipedia();
try{
me.takeScreenShot("Step-2.png",driver);}
catch(Exception e){
System.out.println("Problem, "+e.toString()); }
}
@AfterClass
public static void tearDown()throws Exception{
driver.quit();
}