java.lang.NullPointerException occurs when executing a test via TestNG using Page Object Model.following are the class details:
class Confg:
package com.wordpress.config;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
public class Confg {
public WebDriver driver;
String pageURL="http://demosite.center/wordpress/wp-admin/index.php";
public WebDriver getdriver()
{
return driver;
}
@Parameters({"browser"})
@BeforeClass
public void invokeBrowser(String browser){
if(browser.equalsIgnoreCase("chrome"))
{
System.setProperty("webdriver.chrome.driver", "./driver/chromedriver.exe");
driver=new ChromeDriver();
driver.get(pageURL);
}
}
}
class LoginPage:
package com.wordpress.pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage {
public WebDriver driver;
public String title;
String username = "****";
String password = "***";
By usernmeTextBox = By.xpath(".//*[@id='user_login']");
By passwordTextBox = By.xpath(".//*[@id='user_pass']");
By loginButton = By.xpath(".//*[@id='wp-submit']");
public String expectedURL="http://demosite.center/wordpress/wp-admin/index.php";
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void loginHome() {
driver.findElement(usernmeTextBox).sendKeys(username);
driver.findElement(passwordTextBox).sendKeys(password);
driver.findElement(loginButton).click();
}
public void verifyTitle(){
title=driver.getTitle();
System.out.println(title);
}
}
class LoginPageTest:
package com.wordpress.test;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.wordpress.config.*;
import com.wordpress.pages.LoginPage;
public class LoginPageTest extends Confg {
LoginPage login = new LoginPage(driver);
@BeforeClass
void setup() {
driver = getdriver();
}
@Test
void verifyLogin() {
// LoginPage login = new LoginPage(driver);
login.loginHome();
System.out.println(driver.getCurrentUrl());
try {
Assert.assertEquals(login.expectedURL, driver.getCurrentUrl());
} catch (Exception e) {
e.printStackTrace();
}
}
@Test(dependsOnMethods="verifyLogin")
void verifyPageTitle() {
login.verifyTitle();
try {
Assert.assertEquals(login.expectedURL,login.title);
} catch (Exception e) {
e.printStackTrace();
}
}
}
testng.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test">
<parameter name="browser" value="Chrome"/>
<classes>
<class name="com.wordpress.config.Confg" />
<class name="com.wordpress.test.LoginPageTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
Following is the testng trace:
java.lang.NullPointerException
at com.wordpress.pages.LoginPage.loginHome(LoginPage.java:32)
at com.wordpress.test.LoginPageTest.verifyLogin(LoginPageTest.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
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:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
Question:
java.lang.NullPointerException occurs when executing the above testng.xml. i have tried to debug the issue. it seems driver value is passing as null when i am creating an instance of LoginPage class.
The code works fine if i create instantiate the LoginPage class locally in LoginPageTest class. but i want to create the object of LoginPage class globally in LoginPageTest class so that i can use it again to call other methods of LoginPage class.
please help me finding the reason of null pointer exception..
Note: it is not a duplicate of the mentioned question as testNg have different control flow than the normal java execution answered in the suggested question.