簡體   English   中英

無法在 Java 中訪問子類中的父類對象屬性

[英]not able to access parent class object properties in child class in Java

我的問題很簡單,我有父類,並且在那里創建了一個 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();
    }

}

由於我的驅動程序未初始化,我得到空指針 所以請告訴我簡單訪問超類對象屬性的方法

當我將我的驅動程序設為靜態時,我可以在所有其他類中訪問它的屬性,但我不希望它是靜態的

問題在於您的測試代碼。

您正在通過@BeforeTest注釋方法初始化WebDriver實例。 TestNG的調用@BeforeTest每方法僅ONCE <test>標記。 所以下面的組合(我猜你有什么)會在第二個類的@Test方法中導致NullPointerException

  • 您有SignPageTest擴展BaseTest並假設您有另一個名為SomeFlowTest類,它也擴展了BaseTest
  • 您已經創建了一個包含SignPageTestSomeFlowTest<test>

這將導致@BeforeTest只為SignPageTest (或) SomeFlowTest執行一次(取決於它們在<test>標簽中出現的順序),因為這兩個類都從同一個基類擴展。 所以一旦TestNG的執行VerifyPageTitle()通過SignPageTest它不會執行通過相同的方法SomeFlowTest等等WebDriver例如SomeFlowTest為空。

要解決此問題, @BeforeTest更改為@BeforeClass (每個測試類執行一次)或@BeforeMethod (每個@Test方法執行一次)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM