apologies as this is a really basic problem, but Im really struggling with the basics of this concept.
I have created a public static class to set a browser
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());
}
}
below this, I get the browser using
public static driver getDriver() {
return driver.get();
}
This works fine when generating a single instance, but I need to run this in parallel using multiple instances of the browser.
The problem is, I cant just change public static driver getDriver()
to public driver getDriver()
because it breaks everything else down the line. So I need to instantiate an instance of this class. Unfortunately, everything I have tried completely fails one way or another.
How can I instantiate this class to use in other classes throughout my project?
You need to override the initialValue()
method. Something like:
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;
}
}