gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:21:26 27 4
gpt4 key购买 nike

我的问题很简单我有父类,并且在那里创建了一个新的 webdriver 类驱动程序对象在我的子类中,我可以访问驱动程序对象,但其值为 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();
}

}

由于我的驱动程序未初始化,我收到空指针所以请告诉我如何简单地访问父类(super class)的对象属性

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

最佳答案

问题出在您的测试代码中。

您正在初始化 WebDriver通过 @BeforeTest 实例带注释的方法。 TestNG 调用@BeforeTest每个<test>一次方法标签。所以下面的组合(我猜测是你所拥有的)将导致 NullPointerException@Test第二类的方法。

  • 您有SignPageTest延长BaseTest假设您有另一个名为 SomeFlowTest 的类(class)这也延伸了BaseTest
  • 您已创建 <test>其中包括 SignPageTestSomeFlowTest .

这会导致 @BeforeTest SignPageTest 仅执行一次(或)SomeFlowTest (取决于它们在 <test> 标记中出现的顺序),因为这两个类都从同一个基类扩展。所以一旦 TestNG 执行 VerifyPageTitle()通过SignPageTest它不会通过 SomeFlowTest 执行相同的方法所以WebDriver SomeFlowTest 的实例为空。

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

关于java - Java中无法访问子类中的父类对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45756812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com