Reputation: 19
I have two classes baseClass
and TesCaseLoginPage
. When i am trying
to execute TesCaseLoginPage
class without any Report/Logger
(ExtentReport),Test case is getting pass. But when i am puttin extend report
into my code, I am getting NullPointerException
.Could you please help me
I have written report.endTest(logger);
in line no 51. Tried to comment
this line and then executed.
This time i got same error in line no 50 i.e.
logger.log(LogStatus.INFO,"Browser Closed");
. So every time i am commenting error line, getting same error in new log related line only.
Error log is as below :
Url : http://store.demoqa.com//products-page//your-account// FAILED
> CONFIGURATION: @AfterClass close java.lang.NullPointerException at
> testcases.testCaseLoginPage.close(testCaseLoginPage.java:51) at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl(NativeMethodAccessorImpl.java:62)
>
> sun.reflect.DelegatingMethodAccessorImpl.(DelegatingMethodAccessorImpl.
> java:43) at java.lang.reflect.Method.invoke(Method.java:498) at
> org.testng.internal.MethodInvocationHelper.(MethodInvocationHelper.java:104)
>
> at
> org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:515)
> at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:217)
> at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:144)
> at
> org.testng.internal.invokeAfterClassMethods(TestMethodWorker.java:217)
> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:115)
> at org.testng.TestRunner.privateRun(TestRunner.java:756) at
> org.testng.TestRunner.run(TestRunner.java:610) at
> org.testng.SuiteRunner.runTest(SuiteRunner.java:387) at
> org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382) at
> org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) at
> org.testng.SuiteRunner.run(SuiteRunner.java:289) at
> org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at
> org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at
> org.testng.TestNG.runSuitesSequentially(TestNG.java:1293) at
> org.testng.TestNG.runSuitesLocally(TestNG.java:1218) at
> org.testng.TestNG.runSuites(TestNG.java:1133) at
> org.testng.TestNG.run(TestNG.java:1104) at
> org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
> at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236) at
> org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81) FAILED:
> login java.lang.NullPointerException at
> testcases.testCaseLoginPage.login(testCaseLoginPage.java:35) at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Here is the code :
baseClass.java
package testcases;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;
import factory.BrowserFactory;
import factory.DataproviderFactory;
import pages.LoginPage;
public class baseClass
{
WebDriver driver;
ExtentReports report;
ExtentTest logger;
String loginText;
public void setUP()
{
driver=BrowserFactory.getBrowser("chrome");
driver.get(DataproviderFactory.getConfig().getApplicationurl());
}
public void loginIntoApplication()
{
LoginPage login=PageFactory.initElements(driver, LoginPage.class);
login.Login(DataproviderFactory.getExcel().getData(0, 0, 0),
DataproviderFactory.getExcel().getData(0, 0, 1));
}
public String LoginVerification()
{
try {
Thread.sleep(5000);
} catch (Exception e) {
System.out.println(e.getMessage());
}
//WebDriverWait wait=new WebDriverWait(driver, 20);
//wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@id='wp-admin-bar-my-account']/a")));
loginText=driver.findElement(By.xpath("//li[@id='wp-admin-bar-my-account']/a")).getText();
logger.log(LogStatus.INFO, "Logiin account text has been captured successfully");
return loginText;
}
public void TearDown()
{
driver.quit();
}
}
testCaseLoginPage.java
package testcases;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.relevantcodes.extentreports.LogStatus;
import pages.LoginPage;
public class testCaseLoginPage extends baseClass
{
//WebDriver driver;
//baseClass base=PageFactory.initElements(driver, baseClass.class);
@BeforeTest
public void initial()
{
base.setUP();
}
@Test(priority=1)
public void login()
{
base.loginIntoApplication();
try {
Thread.sleep(5000);
} catch (Exception e) {
System.out.println(e.getMessage());
}
//WebDriverWait wait=new WebDriverWait(driver, 20);
//wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(.,'Howdy')]")));
logger.log(LogStatus.INFO, "Logiin into applicaion successfully");
//LoginPage login=PageFactory.initElements(driver, LoginPage.class);
LoginPage login=new LoginPage(driver);
base.LoginVerification();
System.out.println("Login Text : "+base.loginText);
Assert.assertEquals(base.loginText, login.Exp,"Unable to verify login verification");
logger.log(LogStatus.PASS, "Verified login account with expected user successfully");
}
@AfterTest
public void close()
{
base.TearDown();
logger.log(LogStatus.INFO, "Browser Closed");
report.endTest(logger);
report.flush();
}
}
Upvotes: 1
Views: 13256
Reputation: 448
Initialize the logger in your Test.
use this line:
logger = extent.startTest("Test Name","Description");
Make it the first line even before you call the logger in your test.
For reference see Software Automata - Extent Reports in Selenium
Upvotes: 2