I have a driver hook where the WebDriver is set up. I want to run tests in parallel, but currently, only one browser is opened and all test activities run in that same browser, causing my test cases to fail.
Testng file :
driver hook class
public class DriverHooks {
private static final String homeDirPath = System.getProperty("user.dir");
public static ThreadLocal<WebDriver> webdriver = new ThreadLocal<>();
public static WebDriver getDriver() {
if (webdriver.get() == null) {
createLocalDriver();
}
return webdriver.get();
}
public static void setupDriver() {
if (webdriver.get() == null) {
createLocalDriver();
}
}
private static void createLocalDriver() {
try {
quitDriver();
if (webdriver.get() == null) {
String downloadFilepath = homeDirPath + FileGetParams.paramLookUp("downloadsPath");
LogAndErrorHandler.Instance().LogInfo(downloadFilepath);
switch (FileGetParams.paramLookUp("BROWSER").toUpperCase()) {
case "EDGE":
case "CHROME":
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("prefs",
new HashMap<String, Object>() {{
put("permissions.default.camera", 1);
}}
);
if (System.getenv("WINDOW_SIZE") != null)
chromeOptions.addArguments(System.getenv("WINDOW_SIZE"));
else chromeOptions.addArguments("--start-maximized");
WebDriverManager.chromedriver().setup();
try {
webdriver.set(new ChromeDriver(chromeOptions));
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
}
if (webdriver.get() != null) {
webdriver.get().manage().deleteAllCookies();
}
}
} catch (Exception e) {
LogAndErrorHandler.Instance().LogError(e.getMessage());
}
}
public static void quitDriver() {
if (webdriver.get() != null) {
webdriver.get().quit();
webdriver.remove();
}
}