问题描述
道歉,因为这是一个非常基本的问题,但是我真的在这个概念的基础上苦苦挣扎。
我创建了一个公共静态类来设置浏览器
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;
}
}