如何创建静态类的实例,以便可以从单独的类中调用它?

问题描述

道歉,因为这是一个非常基本的问题,但是我真的在这个概念的基础上苦苦挣扎。

我创建了一个公共静态类来设置浏览器

private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();

public static void setDriver(@NonNull String browserName) {
    if (browserName.equalsIgnoreCase("chrome")) {
       WebDriverManager.chromedriver().setup();
       driver.set(new ChromeDriver());
    } else if (browserName.equalsIgnoreCase("firefox")) {
       WebDriverManager.firefoxdriver().setup();
       driver.set(new FirefoxDriver());
    }
}

在此之下,我使用的浏览器

public static driver getDriver() {
    return driver.get();
}

这在生成单个实例时很好用,但是我需要使用多个浏览器实例并行运行它。

问题是,我不能只将public static driver getDriver()更改为public driver getDriver(),因为它破坏了其他一切。因此,我需要实例化此类的实例。不幸的是,我尝试过的一切都完全失败了。

如何在整个项目中实例化该类以在其他类中使用?

解决方法

您需要覆盖initialValue()方法。像这样:

private static ThreadLocal<WebDriver> driver = new ThreadLocal<>() {
    @Override protected WebDriver initialValue() {
         return getDriver("chrome");
     }
};

private static WebDriver getDriver(@NonNull String browserName) {
    if (browserName.equalsIgnoreCase("chrome")) {
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
    } else if (browserName.equalsIgnoreCase("firefox")) {
        WebDriverManager.firefoxdriver().setup();
        return new FirefoxDriver();
    } else {
        return null;
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...