3

I am facing an issue with NullPointerException. I tried as much as possible but I'm unable to resolve this. I am implementing a POM model(Selenium) for my project.

The page:

public class VendorsHomePageApp { WebDriver driver; public VendorsHomePageApp(WebDriver driver) { this.driver=driver; } @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[1]/a") WebElement dashboardTab; @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[2]/a") WebElement tendersTab; @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[3]/a") WebElement notificationsTab; @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[4]/a") WebElement profileTab; @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/a") WebElement vendorName; @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/ul/li[1]/a") WebElement vendorHelp; @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/ul/li[3]/a") WebElement vendorSignOut; @FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[1]/td[1]/a") WebElement firstTender; @FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[2]/td[1]/a") WebElement secondTender; @FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[3]/td[1]/a") WebElement thirdTender; public void clickOnDashboardTab() { dashboardTab.click(); } public void clickOnTendersTab() { tendersTab.click(); } public void clickOnNotificationsTab() { notificationsTab.click(); } public void clickOnProfileTab() { profileTab.click(); } public void clickOnFirstTender() { firstTender.click(); } } 

TestClass:

public class VendorsHomePageTest { public WebDriver driver; @Test public void verifyVendorsHomePageTest() throws Exception { LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class); login.verifyLoginVendors(); VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class); //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); Thread.sleep(3000); vhpapp.clickOnNotificationsTab(); vhpapp.clickOnProfileTab(); vhpapp.clickOnTendersTab(); vhpapp.clickOnDashboardTab(); vhpapp.clickOnFirstTender(); } } 

Error log:

FAILED: verifyVendorsHomePageTest java.lang.NullPointerException at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69) at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38) at com.sun.proxy.$Proxy4.click(Unknown Source) at com.digitalmqc.automation.vendorspages.VendorsHomePageApp.clickOnNotificationsTab(VendorsHomePageApp.java:60) at com.digitalmqc.automation.vendorstests.VendorsHomePageTest.verifyVendorsHomePageTest(VendorsHomePageTest.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86) at org.testng.internal.Invoker.invokeMethod(Invoker.java:643) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) at org.testng.TestRunner.privateRun(TestRunner.java:782) at org.testng.TestRunner.run(TestRunner.java:632) at org.testng.SuiteRunner.runTest(SuiteRunner.java:366) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319) at org.testng.SuiteRunner.run(SuiteRunner.java:268) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244) at org.testng.TestNG.runSuitesLocally(TestNG.java:1169) at org.testng.TestNG.run(TestNG.java:1064) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177) 

Class:

public class LoginIntoVendors { @Test public void verifyLoginVendors() throws Exception { WebDriver driver= new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("******"); IntiationPage vendorInit=PageFactory.initElements(driver, IntiationPage.class); vendorInit.clickOnLoginButton(); VendorsLoginAction Loginven=PageFactory.initElements(driver, VendorsLoginAction.class); Loginven.vendorlogin("***","***@gmail.com", "****"); String title = driver.getTitle(); System.out.println("Title is :" + title ); } } 

Any help?

3
  • Can you put your NPE logs??
    – Imran
    CommentedJul 21, 2016 at 7:07
  • Please attach your stacktrace..else try to exception debugger in eclipse and that should tell u where NPE isCommentedJul 21, 2016 at 7:08
  • your driver seems to be null, instantiate your driver first.
    – Paras
    CommentedJul 21, 2016 at 7:16

2 Answers 2

1

You need to initialize your WebDriver first. As I seeing you are creating the reference of WebDriver but not initialized, try as below :-

WebDriver driver = new ChromeDriver(); //or other driver which you want 

Note :- If you want to initialize ChromeDriver you need to download chromedriver and set system property before initialize driver as :-

System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); 

So details answer like as below :-

public class VendorsHomePageTest { public WebDriver driver; @Test public void verifyVendorsHomePageTest() throws Exception { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); driver = new ChromeDriver(); //or other driver which you want LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class); login.verifyLoginVendors(); VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class); //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); Thread.sleep(3000); vhpapp.clickOnNotificationsTab(); vhpapp.clickOnProfileTab(); vhpapp.clickOnTendersTab(); vhpapp.clickOnDashboardTab(); vhpapp.clickOnFirstTender(); } } 

Edited :- You need to create separate class which gives you WebDriver instance as below :-

public class DriverInit { public WebDriver driver; private static DriverInit driverInit = null; public static DriverInit getInstance() { if (driverInit == null) { driverInit = new DriverInit(); } return driverInit; } private DriverInit() { this.driver = new FirefoxDriver(); this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); this.driver.get("******"); } public WebDriver getDriver() { return this.driver; } 

now you can call it into LoginIntoVendors as below :-

public class LoginIntoVendors { @Test public void verifyLoginVendors() throws Exception { WebDriver driver = DriverInit.getInstance().getDriver(); IntiationPage vendorInit=PageFactory.initElements(driver, IntiationPage.class); vendorInit.clickOnLoginButton(); VendorsLoginAction Loginven=PageFactory.initElements(driver, VendorsLoginAction.class); Loginven.vendorlogin("***","***@gmail.com", "****"); String title = driver.getTitle(); System.out.println("Title is :" + title ); } } 

and in the VendorsHomePageTest as below :-

public class VendorsHomePageTest { public WebDriver driver; @Test public void verifyVendorsHomePageTest() throws Exception { driver = DriverInit.getInstance().getDriver(); LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class); login.verifyLoginVendors(); VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class); //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); Thread.sleep(3000); vhpapp.clickOnNotificationsTab(); vhpapp.clickOnProfileTab(); vhpapp.clickOnTendersTab(); vhpapp.clickOnDashboardTab(); vhpapp.clickOnFirstTender(); } } 

Hope it helps..:)

9
  • Hi saurabh, I instantiate webdriver in the login class. login functionality is working fine but unable to proceed further.CommentedJul 21, 2016 at 7:32
  • @sandeepkumar then you need to pass that driver object from login class to VendorsHomePageApp classCommentedJul 21, 2016 at 7:34
  • @sandeepkumar could you share LoginIntoVendors class as well??CommentedJul 21, 2016 at 7:39
  • Please check the classCommentedJul 21, 2016 at 7:43
  • @sandeepkumar Yeah I cheked.. Problem with dirver as I saying you are creating dirver at LoginIntoVendors which does not return any refrence of the driverCommentedJul 21, 2016 at 7:48
0

Your driver seems to be null what you can do to avoid this situation is to instantiate your driver reference.

In your test class you can instantiate your driver.

public class VendorsHomePageTest { public WebDriver driver; @Test public void verifyVendorsHomePageTest() throws Exception { driver = new FirefoxDriver(); // or whatever browser you want. // Here you can initialise the elements in `PageObject` class. VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class); // Rest of your code } } 

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.