簡體   English   中英

使用selenium pagefactory時接收空指針異常

[英]Recieving null pointer exception while using 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來識別對象時,它都會拋出nullpointer異常。 奇怪的是頁面工廠適用於第一個java文件測試用例,當我在另一個java文件中使用同一頁面工廠時,它始終以nullpointer異常失敗。 我在使用PageFactory的 stackoverflow Selenium java.lang.NullPointerException上看到了一些解決方案

但是,它對我不起作用。 我嘗試在我的測試用例和我的頁面對象腳本中初始化頁面對象。 但是,它都不適用於我。

這是頁面工廠的代碼:

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


}

請幫幫我。 我超過一周就解決了這個問題而無法找到解決方案。

看這里

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

我希望在HomePage中,有代碼來初始化驅動程序,這就是為什么它正在工作。 那么你傳遞的是未初始化的驅動程序

WebDriver driver;

因此,您可能需要嘗試從主頁收集驅動程序,然后再傳遞到其他頁面。

正如murail所說,當頁面工廠初始化時,驅動程序未初始化。 它將驅動程序傳遞為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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM