在初始化驱动程序的地方扩展 BaseClass 时出现 NullPointerException

NullPointerException when extending BaseClass where driver is initialised

我在尝试将驱动程序初始化分离到一个单独的 class 时遇到 NullPointerException。 我是 Java 的初学者,我做错了什么?

BaseTest.java

package common;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import io.github.bonigarcia.wdm.WebDriverManager;
public class BaseTest { 

    public static WebDriver driver = null;
    
    @BeforeSuite
    public void launchBrowser() {
        WebDriverManager.chromedriver().setup();
        ChromeDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
    }
    
    @AfterSuite
    public void closeBrowser() {
        driver.close();
    }
}

Test.java

package ui;

import org.testng.annotations.Test;

import common.BaseTest;

public class ListenerDemoTest extends BaseTest{
    @Test
    public void something() {
        driver.get("https.//google.com");
    }
}

错误信息:

java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "ui.ListenerDemoTest.driver" is null
    at ui.ListenerDemoTest.something(ListenerDemoTest.java:10)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ...

所以问题是你用 null 值初始化驱动程序并且没有在方法内部更新它

更新 BaseTest

public class BaseTest {
    ChromeDriver driver;

    @BeforeSuite
    public void launchBrowser() {
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
    }

    @AfterSuite
    public void closeBrowser() {
        driver.close();
    }
}

此外,您的 URL 中有错别字 driver.get("https://google.com");

BaseTest 中,您已将 WebDriver driver 实例初始化为 null,但您从未在 @BeforeSuite 设置中使用实际值更新引用。因此引用将始终为空,从而导致 NullPointerException 异常。在 @BeforeSuite 方法中,您完成了变量隐藏,而不是更新 driver 实例,您创建了名为 driver 的本地实例,但未能更新静态实例引用。

所需的更改是

    @BeforeSuite
    public void launchBrowser() {
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
    }