如何创建静态 class 的实例以便可以从单独的 class 调用它?
How to create an instance of a static class so it can be called from a separate class?
抱歉,这是一个非常基本的问题,但我真的很难理解这个概念的基础。
我创建了一个 public 静态 class 来设置浏览器
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()
,因为它会破坏其他所有内容。所以我需要实例化这个class的一个实例。不幸的是,我尝试过的一切都以某种方式完全失败。
如何实例化此 class 以在我的项目中的其他 class 中使用?
您需要覆盖 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;
}
}
抱歉,这是一个非常基本的问题,但我真的很难理解这个概念的基础。
我创建了一个 public 静态 class 来设置浏览器
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()
,因为它会破坏其他所有内容。所以我需要实例化这个class的一个实例。不幸的是,我尝试过的一切都以某种方式完全失败。
如何实例化此 class 以在我的项目中的其他 class 中使用?
您需要覆盖 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;
}
}