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

时间:2018-03-05 09:48:44

标签: java selenium selenium-webdriver testng

我有2个班级

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

3.NEW TEST-这是我的测试用例,我在其中调用了#34;浏览器"和#34;定位器"类...

以下是我的浏览器类

浏览器课程

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() {


  }

}

2 个答案:

答案 0 :(得分:3)

您获得NullPointerException,因为您使用的是未初始化的WebDriver

下面的代码会给您带来麻烦。您正在将空驱动程序传递给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 :(得分:1)

由于NullPointerException方法中的WebDriver对象尚未初始化并且因此为空,因此必须提供@BeforeTest

Browser  load = new Browser(driver);

此处,驱动程序对象尚未初始化。

<强>建议:

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