Skip to content

Commit fdcf43e

Browse files
committed
Added Threadlocal to fix the thread safety issues during parallel
execution
1 parent 7a4fd94 commit fdcf43e

25 files changed

+207
-196
lines changed

WebTestRunner.xml

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,18 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
3-
<suite name="Demo test suite" >
3+
<suite name="Demo test suite" parallel="methods" thread-count="3">
44

55

66
<listeners>
77
<listener class-name="listeners.TestListener" ></listener>
88
<listener class-name="listeners.MethodInterceptor" ></listener>
9-
109
</listeners>
1110

1211
<parameter name = "browser" value = "chrome"></parameter>
13-
<test name="Navigate to home page" parallel="tests" thread-count="1">
14-
12+
<test name="Navigate to home page" thread-count="3">
1513
<classes>
1614
<class name="Tests.NewUserRegistration"/>
1715
</classes>
1816
</test>
19-
<!--
20-
<parameter name = "browser" value = "chrome"></parameter>
21-
<test name="Navigate to user signup page" parallel="tests" thread-count="1">
22-
<classes>
23-
<class name="Tests.NewUserRegistration">
24-
<methods>
25-
<include name="navigateToUserSignupPage"></include>
26-
</methods>
27-
</class>
28-
</classes>
29-
</test>
3017

31-
<parameter name = "browser" value = "chrome"></parameter>
32-
<test name="Register new user" parallel="tests" thread-count="1">
33-
<classes>
34-
<class name="Tests.NewUserRegistration">
35-
<methods>
36-
<include name="registerNewUser"></include>
37-
</methods>
38-
</class>
39-
</classes>
40-
</test>
41-
-->
4218
</suite>

resources/chromedriver.exe

9.27 MB
Binary file not shown.

src/main/java/driverfactory/DriverFactory.java renamed to src/main/java/browserfactory/BrowserFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package driverfactory;
1+
package browserfactory;
22

3-
public class DriverFactory {
3+
public class BrowserFactory {
44

5-
public static DriverManager getDriverManager(String browser) {
6-
DriverManager driverManager;
5+
public static BrowserManager getDriverManager(String browser) {
6+
BrowserManager driverManager;
77

88
switch (browser) {
99
case "chrome":
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package driverfactory;
1+
package browserfactory;
22

33
import org.openqa.selenium.WebDriver;
44

5-
public interface DriverManager {
5+
public interface BrowserManager {
66

77
WebDriver initDriver();
88
}

src/main/java/driverfactory/ChromeDriverManager.java renamed to src/main/java/browserfactory/ChromeDriverManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package driverfactory;
1+
package browserfactory;
22

33
import org.openqa.selenium.WebDriver;
44
import org.openqa.selenium.chrome.ChromeDriver;
55
import org.openqa.selenium.chrome.ChromeOptions;
66

77
import io.github.bonigarcia.wdm.WebDriverManager;
88

9-
public class ChromeDriverManager implements DriverManager{
9+
public class ChromeDriverManager implements BrowserManager{
1010
WebDriver driver;
1111

1212
public WebDriver initDriver() {

src/main/java/driverfactory/EdgeDriverManager.java renamed to src/main/java/browserfactory/EdgeDriverManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package driverfactory;
1+
package browserfactory;
22

33
import org.openqa.selenium.WebDriver;
44
import org.openqa.selenium.edge.EdgeDriver;
55

66
import io.github.bonigarcia.wdm.WebDriverManager;
77

8-
public class EdgeDriverManager implements DriverManager{
8+
public class EdgeDriverManager implements BrowserManager{
99

1010
WebDriver driver;
1111

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package constants;
2+
3+
public final class GlobalConstants {
4+
5+
private GlobalConstants() {}
6+
7+
public static final String RUN_SETUP_CSV = System.getProperty("user.dir")+"/src/test/resources/RunSetup.csv";
8+
public static final String CONFIGFILE = System.getProperty("user.dir")+"/src/test/resources/Config.properties";
9+
10+
}

src/main/java/decorators/DriverBase.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,27 @@
1313
import org.openqa.selenium.support.ui.ExpectedConditions;
1414
import org.openqa.selenium.support.ui.WebDriverWait;
1515

16-
import driverfactory.DriverFactory;
16+
import browserfactory.BrowserFactory;
1717

1818
public class DriverBase implements Driver {
1919
private WebDriver driver;
2020
private WebDriverWait wait;
21-
22-
protected static ThreadLocal<WebDriver> threadLocaldriver = new ThreadLocal<>();
23-
24-
public void start(String browser) {
25-
driver = DriverFactory.getDriverManager(browser).initDriver();
21+
22+
public void start(String browser) {
23+
driver = BrowserFactory.getDriverManager(browser).initDriver();
2624
wait = new WebDriverWait(driver, 60);
27-
threadLocaldriver.set(driver);
2825
}
2926

3027
public void quit() {
31-
threadLocaldriver.get().quit();
32-
threadLocaldriver.remove();
28+
driver.quit();
3329
}
3430

3531
public void goToUrl(String url) {
36-
threadLocaldriver.get().get(url);
32+
driver.get(url);
3733
}
3834

3935
public String getPageTitle() {
40-
return threadLocaldriver.get().getTitle();
36+
return driver.getTitle();
4137
}
4238

4339
public Element findElement(By locator) {
@@ -63,12 +59,12 @@ public List<Element> findElements(By locator) {
6359
}
6460

6561
public void waitForAjax() {
66-
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) threadLocaldriver.get();
62+
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
6763
wait.until(d -> (Boolean) javascriptExecutor.executeScript("return window.jQuery != undefined && jQuery.active == 0"));
6864
}
6965

7066
public void waitUntilPageLoadsCompletely() {
71-
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) threadLocaldriver.get();
67+
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
7268
wait.until(d -> javascriptExecutor.executeScript("return document.readyState").toString().equals("complete"));
7369
}
7470

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package drivermanager;
2+
3+
import decorators.Driver;
4+
5+
/*
6+
* Driver manager is used to create thread safe driver in parallel
7+
*/
8+
9+
public final class DriverManager {
10+
11+
public static final ThreadLocal<Driver> threadlocal = new ThreadLocal<>();
12+
13+
//Method to get the thread local driver. Should be used to get the driver
14+
//throughout the project for parallel threads to work as expected
15+
public static Driver getDriver() {
16+
return threadlocal.get();
17+
}
18+
19+
// Method to set the Thread local driver. Type driver of type Driver is accepted
20+
public static void setDriver(Driver driver) {
21+
threadlocal.set(driver);
22+
}
23+
24+
// Methos to remove the driver after excecution
25+
public static void removeDriver() {
26+
threadlocal.get().quit();
27+
threadlocal.remove();
28+
}
29+
30+
}

src/main/java/enums/FileType.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)