Wednesday, February 25, 2015

Selenium web driver tests using testng and HTML reports using ExtentReports



We’ll use two simple tests that are executed against the http://relevantcodes.com website.  We’ll have ExtentReports generate a HTML report that contain the appropriate test results.
checkLinks1 will succeed where in checkLinks2 fails on lnk_Google 

Home_Page.java


package pageObjects;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

public class Home_Page {

private static WebElement element = null;


public static WebElement lnk_Home(WebDriver driver){

element = driver.findElement(By.xpath("//a[@title='Home']"));

return element;

}

public static WebElement lnk_Articles(WebDriver driver){

element = driver.findElement(By.xpath("//a[contains(.,'Articles')]"));

return element;

}
public static WebElement lnk_Downloads(WebDriver driver){

element = driver.findElement(By.xpath("//a[contains(.,'Downloads')]"));

return element;

}
public static WebElement lnk_Contact(WebDriver driver){

element = driver.findElement(By.xpath("//a[contains(.,'Contact')]"));

return element;

}
public static WebElement lnk_Subscribe(WebDriver driver){

element = driver.findElement(By.xpath("//a[contains(.,'Subscribe')]"));

return element;

}

public static WebElement lnk_Google(WebDriver driver){

element = driver.findElement(By.xpath("//a[contains(.,'Roogle')]"));

return element;

}
}





PageObjectModel.java

package pageObjects;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

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.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;

import com.relevantcodes.extentreports.DisplayOrder;
import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.LogStatus;


public class PageObjectModel    {

public static WebDriver driver = null;

public static final ExtentReports extent = ExtentReports.get(PageObjectModel.class); 
public static  String reportLocation = "reports/";
public static  String imageLocation = "images/";

public static File lDir = new File("");
public static String absolutePath = lDir.getAbsolutePath();

static File folder1 = new File(reportLocation);




public static String createScreenshot(WebDriver driver) {
UUID uuid = UUID.randomUUID();
// generate screenshot as a file object
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
// copy file object to designated location
FileUtils.copyFile(scrFile, new File(reportLocation + imageLocation + uuid + ".png"));
} catch (IOException e) {
System.out.println("Error while generating screenshot:\n" + e.toString());
}
return imageLocation + uuid + ".png";
}

@BeforeSuite
public static void beforeTestSuite(){
extent.init(reportLocation + "TestReport.html", true, DisplayOrder.BY_OLDEST_TO_LATEST);
extent.configuration().header().introSummary("Test Report");
extent.configuration().footer().useExtentFooter(false);
}


@BeforeMethod(alwaysRun = true)
public static void startDriver(Method method) {
if(!folder1.exists() )
{
folder1.mkdir();
}

driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://relevantcodes.com");
extent.log(LogStatus.INFO, "startDriver", "Browser launched");
extent.startTest(method.getName());

}


@AfterMethod(alwaysRun = true)
public static void stopDriver(ITestResult testResult) throws IOException {

if (testResult.getStatus() == ITestResult.FAILURE) {
extent.log(LogStatus.FAIL, "Check error message","View details below:",absolutePath+"/"+reportLocation+"/"+createScreenshot(getDriver()));
//extent.log(LogStatus.FAIL, "test method failed", testResult.getTestName());

}

driver.quit();
extent.log(LogStatus.INFO, "stopDriver", "Browser closed");
extent.endTest();

}


public static WebDriver getDriver(){
return driver;
}

}



Test1.java

package testng;

import org.testng.SkipException;
import org.testng.annotations.Test;

import pageObjects.Home_Page;
import pageObjects.PageObjectModel;

import com.relevantcodes.extentreports.LogStatus;

public class Test1 extends PageObjectModel {


@Test(enabled=true)
private static void checkLinks1() {
// extent.startTest("passTest");

Home_Page.lnk_Home(driver).click();
extent.log(LogStatus.INFO, "StepName", "click lnk_Home");

Home_Page.lnk_Articles(driver).click();
extent.log(LogStatus.INFO, "StepName", "click lnk_Articles");

Home_Page.lnk_Downloads(driver).click();
extent.log(LogStatus.INFO, "StepName", "lnk_Downloads");

Home_Page.lnk_Contact(driver).click();
extent.log(LogStatus.INFO, "StepName", "lnk_Contact");



//  extent.endTest();


}




//This test will fail as there is no link by name google.
@Test(enabled=true)
private static void checkLinks2() {
//extent.startTest("failTest");

Home_Page.lnk_Home(driver).click();
extent.log(LogStatus.INFO, "StepName", "click lnk_Home");

Home_Page.lnk_Articles(driver).click();
extent.log(LogStatus.INFO, "StepName", "click lnk_Articles");

Home_Page.lnk_Downloads(driver).click();
extent.log(LogStatus.INFO, "StepName", "lnk_Downloads");


Home_Page.lnk_Contact(driver).click();
extent.log(LogStatus.INFO, "StepName", "lnk_Contact");


Home_Page.lnk_Google(driver).click();
extent.log(LogStatus.INFO, "StepName", "lnk_Google");



}


@Test(enabled=true)
private static void checkLinks3() {
//Not implemented skipping tests

extent.log(LogStatus.WARNING, "checkLinks3", "SKIPPED");
    throw new SkipException("Testing skip.");

}


}


Report generated using ExtentReports

Extent Reports
checkLinks1
pass
Description:
checkLinks2
fail
Description:
checkLinks3
warning
Description:

2 comments:

  1. Hi,
    I'm getting an error while executing above sample code.
    @BeforeSuite
    public static void beforeTestSuite()
    {
    extent.init(reportLocation + "TestReport.html", true, DisplayOrder.BY_OLDEST_TO_LATEST);
    extent.configuration().header().introSummary("Test Report");
    extent.configuration().footer().useExtentFooter(false);
    }
    extent.configuration() - throws an error "The Method Configuration() is undefined for the type ExtentReports.".

    Kindly help me out to resolving this error. Thanks,

    ReplyDelete
  2. selenium tests using testng really well explained one thanks a lot for sharing
    Selenium Training

    ReplyDelete