Получение исключения нулевого указателя при использовании selenium pagefactory

Я использую фабрику страниц селена. И при использовании любого из WebElements я получаю исключение нулевого указателя.

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("");
}
}

` Всякий раз, когда я использую pagefactory для идентификации объектов, возникает исключение нулевого указателя. Странно то, что фабрика страниц работает для первого тестового примера java-файла, когда я использую ту же фабрику страниц в другом java-файле, она всегда терпит неудачу с исключением нулевого указателя. Я видел какое-то решение в stackoverflow Selenium java.lang.NullPointerException с PageFactory

Однако это не сработало для меня. Я попытался инициализировать объект страницы в своем тестовом примере, а также в сценарии объекта моей страницы. Однако ни то, ни другое не сработало для меня.

Вот код для фабрики страниц:

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);
    }


}

Пожалуйста, помогите мне. Я разбираюсь с этой проблемой уже более недели и не могу найти решение.


person chinmay moharir    schedule 12.01.2018    source источник
comment
Возможный дубликат NullpointerException в Selenium при использовании SendKeys   -  person DebanjanB    schedule 12.01.2018


Ответы (2)


глянь сюда

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

Я надеюсь, что на домашней странице есть код для инициализации драйвера, поэтому он работает. то вы передаете драйвер, который не инициализирован

WebDriver driver;

Таким образом, вам может понадобиться попробовать собрать драйвер с домашней страницы, а затем перейти и на другие страницы.

person murali selenium    schedule 12.01.2018

Как сказал Мураил, драйвер не инициализируется при инициализации фабрики страниц. Он передает драйвер как null.

Измените инициализацию фабрики страниц после инициализации драйвера, как указано ниже.

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);
person Murthi    schedule 12.01.2018