无法访问Java中子类中的父类对象属性

无法访问Java中子类中的父类对象属性,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我的问题很简单 我有一个父类,我在那里创建了一个webdriver类的新驱动程序对象 在我的子类中,我可以访问driver对象,但其值为null 我无法访问对象属性 我的家长班是 public class BaseTest { public static WebDriver driver; @BeforeTest @Parameters("browser") public void VerifyPageTitle(String browser) {

我的问题很简单 我有一个父类,我在那里创建了一个webdriver类的新驱动程序对象 在我的子类中,我可以访问driver对象,但其值为null 我无法访问对象属性 我的家长班是

public class BaseTest {

    public static  WebDriver driver;
    @BeforeTest
    @Parameters("browser")
    public void  VerifyPageTitle(String browser)
    {
        if(browser.equalsIgnoreCase("chrome")){
            System.setProperty("webdriver.chrome.driver","C://chromedriver_win32(1)//chromedriver_win32//chromedriver.exe");
             driver = new ChromeDriver();
        }
        if(browser.equalsIgnoreCase("IE")){
            System.setProperty("webdriver.ie.driver","C://IEDriverServer_x64_3.3.0//IEDriverServer.exe");
            driver = new InternetExplorerDriver();
        }
        driver.manage().window().maximize();
    }
}
在我的子类代码中

public class SignPageTest extends BaseTest{

    SignPage obj ;
    Boolean stu;
    @Test
    public void navigateToSignPage(){
    obj = new SignPage(driver);
    stu = obj.navigateToSignIn();
    }
    @Test(priority=2)
    public void getHandles(){
        stu = obj.handlingWindows();
    }

}
由于我的驱动程序未初始化,我得到的是空指针 所以,请告诉我如何简单地访问超类的对象属性


当我将驱动程序设置为静态时,我可以在所有其他类中访问它的属性,但我不希望它是静态的,问题在于测试代码

您正在通过
@BeforeTest
注释方法初始化
WebDriver
实例。TestNG仅对每个
标记调用
@BeforeTest
方法一次。因此,下面的组合(我猜是您拥有的)将在第二类的
@Test
方法中导致
NullPointerException

  • 您有
    SignPageTest
    extend
    BaseTest
    ,假设您有另一个名为
    SomeFlowTest
    的类,它也扩展了
    BaseTest
  • 您已经创建了一个
    ,其中包括
    SignPageTest
    SomeFlowTest
这将导致
@BeforeTest
对于
SignPageTest
(或)
SomeFlowTest
(取决于它们在
标记中出现的顺序)只执行一次,因为这两个类都从相同的基类扩展而来。因此,一旦TestNG通过
SignPageTest
执行
VerifyPageTitle()
,它将不会通过
SomeFlowTest
执行相同的方法,因此
SomeFlowTest
WebDriver
实例为空


要解决此问题,请将
@BeforeTest
更改为
@BeforeClass
(每个测试类执行一次)或
@beforethod
(为每个
@test
方法执行一次).

在哪一行出现空指针异常?请看,我在子类中能够访问的驱动程序甚至还没有初始化,当该对象被用于执行任何操作时,就会出现空指针。在我的情况下,它在我的页面类中可能重复您的操作是100%正确的,你已经准确地告诉了问题,我也试过了,但是这种做法有一个问题,你的新驱动程序每次都会被创建,所以在这种情况下,每个类或方法都会创建新的浏览器,我不希望创建新的浏览器,我想使用相同的webdriver。@abishekkachroo-如果您想创建一次webdriver实例并在其他地方共享,那么您应该尝试利用Singleton模式,其中对它的第一次调用将导致浏览器被实例化,其余所有调用将只使用已创建的实例。创建调用可以从
@BeforeTest
方法中触发,其余代码只需调用
getter()
方法即可。