首页 > 解决方案 > 我已经创建了 chrome 驱动程序对象,然后我得到了 java.lang.NullPointerException

问题描述

我正在学习 TestNG,所以我创建了一个基类,其中我为 chrome 浏览器创建了对象。

这是我的基类

public class BaseClass {

    public String url="https://dofdev-services.azurewebsites.net/";
    public String username1="info@gravityconsulting.com.au";
    public String password1="Gravity@123";
    public  WebDriver driver;

    @BeforeClass
    public void setUp() 
    {
        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir" +"/Drivers/chromedriver.exe"));
        driver=new ChromeDriver();
    }

    @AfterClass()
    public void tearDown() 
    {
        driver.quit();
    }
}

这是我的测试用例类

public class TC_LoginPage_001 extends BaseClass{

      @Test
      public  void loginTestCase()
      {
    driver.get(url);
    LoginPagePOM lp=new LoginPagePOM(driver);
    lp.setUserName(username1);
    lp.setPassword(password1);
    lp.clickSignIn();

    if(driver.getTitle().equalsIgnoreCase(""))
    {

        Assert.assertTrue(true);
    }else {
        Assert.assertTrue(false);
    }
}

这是我的另一个类,我创建了构造函数(pom 类)

 public class LoginPagePOM {

 WebDriver driver;

 public LoginPagePOM(WebDriver driver)
  {
    this.driver=driver;
    PageFactory.initElements(driver, this);
      }
    @FindBy(id="userName")
    WebElement username;

    @FindBy(name ="passwords")
     WebElement password;

    @FindBy(name="btn-sdz-login")
     WebElement click;


    public void setUserName(String usname)
          {
      username.sendKeys(usname);
               }

   public void setPassword(String Pass) 
             {
         password.sendKeys(Pass);
     }

     public void clickSignIn()
       {
       click.click();
       }
               }    

这是异常堆栈跟踪(获取空指针异常)

异常堆栈跟踪

标签: javaseleniumtestng

解决方案


你有一个驱动程序BaseClass,然后你又在LoginPagePOM课堂上做一个驱动程序,因此你得到了 NPE。
为了解决这个问题,您制作了驱动程序static,然后在需要它的所有类中使用该驱动程序。您不需要再次初始化它。
您可以public static WebDriver driver;在您的课程中BaseClass使用,然后您可以BaseClass.driver在您需要的所有课程中使用它。

TC_LoginPage_001会是这样的:

public class TC_LoginPage_001 extends BaseClass{

  @Test
  public  void loginTestCase()
  {
BaseClass.driver.get(url);
LoginPagePOM lp=new LoginPagePOM(driver);
lp.setUserName(username1);
lp.setPassword(password1);
lp.clickSignIn();

if(BaseClass.driver.getTitle().equalsIgnoreCase(""))
{

    Assert.assertTrue(true);
}else {
    Assert.assertTrue(false);
     }
}

LoginPagePOM会是这样的:

public class LoginPagePOM {

 public LoginPagePOM()
  {
    PageFactory.initElements(BaseClass.driver, this);
  }
@FindBy(id="userName")
WebElement username;

@FindBy(name ="passwords")
 WebElement password;

@FindBy(name="btn-sdz-login")
 WebElement click;


public void setUserName(String usname)
      {
  username.sendKeys(usname);
           }

   public void setPassword(String Pass) 
         {
     password.sendKeys(Pass);
 }

 public void clickSignIn()
   {
   click.click();
   }
       }    

推荐阅读