无法从TestNG Class调用两个单独类的属性 - > java.lang.NullPointerException

问题描述 投票:2回答:2

我有2节课

1.BROWSER ---这个类有加载浏览器的方法,所以我可以在我的每个测试用例中调用2.LOCATORS - 这个类包含存储所有webelements的方法

3.NEW TEST-这是我的测试用例,其中我称之为“浏览器”和“定位器”类......

下面是我的浏览器类

浏览器类

package TestProject.TestProject;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Browser {

    WebDriver driver;

public Browser (WebDriver driver) {

    this.driver = driver;
}


public   WebDriver  GetBrowser() 

    {

         System.setProperty("webdriver.chrome.driver",  "E:\\chromedriver.exe");

         driver = new ChromeDriver();
         String baseurl = "https:\\live.guru99.com\\index.php\\";
         driver.get(baseurl);
         driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        return driver;
    }





}

下面是我的Locator类

package TestProject.TestProject;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class Locators {

    WebDriver driver;

    //Locators
    By mobile =  By.xpath("//a[contains(.,'Mobile')]");


    public Locators (WebDriver driver){

        this.driver = driver;


    }

    public void mobile() 

    {
     driver.findElement(mobile).click();
    }

}

我的测试案例

package TestProject.TestProject;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;


public class NewTest {

    WebDriver driver;


      @BeforeTest
      public void beforeTest() {

          Browser load = new Browser(driver);
         driver =load.GetBrowser();
      }



  @Test
  public void   VerifyMobile() {

      Locators mobilemenu = new Locators(driver);
            mobilemenu.mobile();
  }



  @AfterTest
  public void afterTest() {


  }

}
java selenium selenium-webdriver testng
2个回答
3
投票

你得到NullPointerException,因为你使用的是非初始化的WebDriver

下面的代码给你带来麻烦。你正在将null驱动程序传递给Browser类...然后你可能用它做了一些事情,但你没有返回任何初始化的WebDriver

public class NewTest {

WebDriver driver;

  @BeforeTest
  public void beforeTest() {

    Browser  load = new Browser(driver);
  load.GetBrowser();
  }

试试这个:

public WebDriver GetBrowser() {
     System.setProperty("webdriver.chrome.driver",  "E:\\chromedriver.exe");
     driver = new ChromeDriver();
     String baseurl = "https:\\live.guru99.com\\index.php\\";
     driver.get(baseurl);
     driver.manage().window().maximize();
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
     return driver;
}

您将初始化的WebDriver返回给您的测试,如下所示:

driver = load.GetBrowser();

1
投票

这必然会给NullPointerException,因为@BeforeTest方法中的WebDriver对象尚未初始化,因此是空的。

Browser  load = new Browser(driver);

这里,驱动程序对象尚未初始化。

建议:

不是调用GetBrowser()方法,而是在Browser类构造函数中初始化WebDriver对象,并继承Browser类,并在需要时使用WebDriver对象。

© www.soinside.com 2019 - 2024. All rights reserved.