1

I am using selenium page factory. And while using any of the WebElements, I am receiving null pointer exception.

import java.io.IOException; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.testng.Assert; import org.testng.annotations.Test; import com.PagesUsingPageFactory.AddNewCustomerUsingPF; import com.PageswithoutPageFactory.HomePage; import com.PageswithoutPageFactory.InvokeBrowserSettings; import com.PageswithoutPageFactory.LoginPage; public class CreateNewCustomerNegative { WebDriver driver; @Test public void TC_02() throws Exception{ HomePage hompg = new HomePage(driver); AddNewCustomerUsingPF newcust = new AddNewCustomerUsingPF(driver); LoginPage loginpage = new LoginPage(driver); System.setProperty("webdriver.chrome.driver","C:\\Users\\Chinmay\\Downloads\\chromedriver_win32\\chromedriver.exe"); InvokeBrowserSettings invoke = new InvokeBrowserSettings(); driver = invoke.invokeBrowser("chrome", Constant.URL); loginpage.SignIntoAppWithValidUsrPwd(driver); //verify home page displayed after valid credentials hompg.validateHomePageLogo(driver); hompg.validateManagerButton(driver); hompg.validatenewCustomerButton(driver); hompg.clickNewCustomer(driver); //driver.findElement(By.xpath("//a[contains(text(),'New Customer')]")).click(); //check if add new customer tab is present Assert.assertTrue(driver.findElement(By.xpath("//p[contains(text(),'Add New Customer')]")).isDisplayed(), "Add new customer option is not visible"); //check if customer name textbox is present Assert.assertTrue(driver.findElement(By.name("name")).isDisplayed(), "Customer name text box is not presernt"); //name field blank validation System.out.println("driver=" + driver); newcust.typeCustomerName(""); } } 

` Whenever I am using pagefactory for identifying objects, it throws nullpointer exception. The weird thing is the page factory works for first java file test case, when I use same page factory in another java file, it always fails with nullpointer exception. I saw some solution on stackoverflow Selenium java.lang.NullPointerException with PageFactory

However, it did not work for me. I tried initializing page object in my test case and also in my page object script. However, neither of it worked for me.

Here is the code for page factory :

package com.PagesUsingPageFactory; import org.apache.commons.lang3.RandomStringUtils; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.How; import org.openqa.selenium.support.PageFactory; public class AddNewCustomerUsingPF { public WebDriver driver; public AddNewCustomerUsingPF(WebDriver driver) { this.driver=driver; PageFactory.initElements(driver, this); } @FindBy(how=How.XPATH, using="//p[contains(text(),'Add New Customer')]") public WebElement addNewCustomerLabel; @FindBy(how=How.XPATH, using="//input[@type='text'][@name='name']") public WebElement customerNameTxtField; @FindBy(how=How.XPATH, using="//a[contains(text(),'New Customer')]") public WebElement newCustomerButton; public void typeCustomerName(String name) throws Exception { customerNameTxtField.sendKeys(name); } } 

Please help me out. I am debigging this issue since more than a week and not able to find the solution.

1

2 Answers 2

2

see here

 WebDriver driver; @Test public void TC_02() throws Exception{ HomePage hompg = new HomePage(driver); 

i hope in HomePage, there is code to initialize driver, that why it is working. then you are passing driver which is not initialized

WebDriver driver; 

So, you may need to try to collect driver from Homepage and then pass to other pages also.

    1

    As murail said, the driver is not initialized when page factory is intialized. It is passing driver as null.

    Change page factory initialization after driver initialization as given below.

    public class CreateNewCustomerNegative { WebDriver driver; @Test public void TC_02() throws Exception{ //Initialize the driver first System.setProperty("webdriver.chrome.driver","C:\\Users\\Chinmay\\Downloads\\chromedriver_win32\\chromedriver.exe"); InvokeBrowserSettings invoke = new InvokeBrowserSettings(); driver = invoke.invokeBrowser("chrome", Constant.URL); //Initialize page factory HomePage hompg = new HomePage(driver); AddNewCustomerUsingPF newcust = new AddNewCustomerUsingPF(driver); LoginPage loginpage = new LoginPage(driver); loginpage.SignIntoAppWithValidUsrPwd(driver); 

      Start asking to get answers

      Find the answer to your question by asking.

      Ask question

      Explore related questions

      See similar questions with these tags.