【问题标题】:Not able to call the properties of two separate classes from TestNG Class ->java.lang.NullPointerException无法从 TestNG Class ->java.lang.NullPointerException 调用两个单独类的属性
【发布时间】:2018-03-05 09:48:43
【问题描述】:

我有两节课

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





}

下面是我的定位器类

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


    【解决方案1】:

    您得到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();
    

    【讨论】:

    • 谢谢,它的工作,但我有一个疑问,对于定位器类,它的工作,但只有浏览器类,我得到这个异常。也为“浏览器”类使用了相同的代码
    • @jino 使用最近的更改编辑您的问题,并指出哪一行导致异常。我可以帮你:)
    • 失败:TestProject.TestProject.Locators.mobile(Locators.java:24)处的VerifyMobile java.lang.NullPointerException TestProject.TestProject.NewTest.VerifyMobile(NewTest.java:29)失败:VerifyMobile java .lang.NullPointerException at TestProject.TestProject.Locators.mobile(Locators.java:24)
    • @jino 请编辑您的问题。添加您所做的所有更改。这对于解决您的问题至关重要。
    • @jino 您使用了我的代码,向我征求意见,但您接受了另一个答案?不酷。
    【解决方案2】:

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

    Browser  load = new Browser(driver);
    

    这里,驱动对象还没有初始化。

    建议:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2011-10-09
      • 2019-12-08
      相关资源
      最近更新 更多