Skip to content

Commit ea1e771

Browse files
authored
Merge pull request #11 from rahulmishra-lt/driver-threadsafe-and-test-fix
made driver threadsafe and fixed test
2 parents 0b57dcc + bc70943 commit ea1e771

File tree

6 files changed

+130
-80
lines changed

6 files changed

+130
-80
lines changed

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
<url>http://maven.apache.org</url>
1111

1212
<properties>
13+
<maven.compiler.source>1.8</maven.compiler.source>
14+
<maven.compiler.target>1.8</maven.compiler.target>
1315
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1416
</properties>
1517

Lines changed: 49 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,67 @@
11
package MyRunner;
22

3-
import java.net.URL;
4-
53
import io.cucumber.testng.AbstractTestNGCucumberTests;
64
import io.cucumber.testng.CucumberOptions;
75
import io.cucumber.testng.TestNGCucumberRunner;
6+
import manager.Driver;
7+
import manager.DriverManager;
88
import org.openqa.selenium.remote.CapabilityType;
99
import org.openqa.selenium.remote.DesiredCapabilities;
1010
import org.openqa.selenium.remote.RemoteWebDriver;
11-
import org.testng.annotations.AfterClass;
12-
import org.testng.annotations.BeforeClass;
13-
import org.testng.annotations.BeforeMethod;
14-
import org.testng.annotations.DataProvider;
15-
import org.testng.annotations.Parameters;
11+
import org.testng.annotations.*;
1612

13+
import java.net.URL;
1714

1815
@CucumberOptions(
19-
features = "src/main/java/Features/todo.feature",
20-
glue = {"stepDefinitions"},
21-
plugin = "json:target/cucumber-reports/CucumberTestReport.json")
16+
features = "src/main/java/Features/todo.feature",
17+
glue = {"stepDefinitions"},
18+
plugin = "json:target/cucumber-reports/CucumberTestReport.json")
19+
20+
public final class TestRunner extends AbstractTestNGCucumberTests {
21+
22+
private TestNGCucumberRunner testNGCucumberRunner;
23+
24+
@BeforeClass(alwaysRun = true)
25+
public void setUpCucumber() {
26+
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
27+
}
28+
29+
@BeforeMethod(alwaysRun = true)
30+
@Parameters({ "browser", "version", "platform" })
31+
public void setUpClass(String browser, String version, String platform) throws Exception {
32+
33+
RemoteWebDriver remoteWebdriver = null;
34+
35+
String username = System.getenv("LT_USERNAME") == null ? "YOUR LT_USERNAME" : System.getenv("LT_USERNAME");
36+
String accesskey = System.getenv("LT_ACCESS_KEY") == null ? "YOUR LT_ACCESS_KEY" : System.getenv("LT_ACCESS_KEY");
2237

23-
public class TestRunner extends AbstractTestNGCucumberTests {
24-
25-
private TestNGCucumberRunner testNGCucumberRunner;
26-
27-
public static RemoteWebDriver connection;
28-
29-
@BeforeClass(alwaysRun = true)
30-
public void setUpCucumber() {
31-
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
32-
}
33-
34-
@BeforeMethod(alwaysRun = true)
35-
@Parameters({ "browser", "version", "platform" })
36-
public void setUpClass(String browser, String version, String platform) throws Exception {
38+
DesiredCapabilities capability = new DesiredCapabilities();
39+
capability.setCapability(CapabilityType.BROWSER_NAME, browser);
40+
capability.setCapability(CapabilityType.VERSION, version);
41+
capability.setCapability(CapabilityType.PLATFORM, platform);
3742

38-
String username = System.getenv("LT_USERNAME") == null ? "YOUR LT_USERNAME" : System.getenv("LT_USERNAME");
39-
String accesskey = System.getenv("LT_ACCESS_KEY") == null ? "YOUR LT_ACCESS_KEY" : System.getenv("LT_ACCESS_KEY");
43+
capability.setCapability("build", "Cucumber Sample Build");
4044

41-
DesiredCapabilities capability = new DesiredCapabilities();
42-
capability.setCapability(CapabilityType.BROWSER_NAME, browser);
43-
capability.setCapability(CapabilityType.VERSION,version);
44-
capability.setCapability(CapabilityType.PLATFORM, platform);
45-
46-
capability.setCapability("build", "Cucumber Sample Build");
47-
48-
capability.setCapability("network", true);
49-
capability.setCapability("video", true);
50-
capability.setCapability("console", true);
51-
capability.setCapability("visual", true);
45+
capability.setCapability("network", true);
46+
capability.setCapability("video", true);
47+
capability.setCapability("console", true);
48+
capability.setCapability("visual", true);
5249

53-
String gridURL = "https://" + username + ":" + accesskey + "@hub.lambdatest.com/wd/hub";
54-
System.out.println(gridURL);
55-
connection = new RemoteWebDriver(new URL(gridURL), capability);
56-
System.out.println(capability);
57-
System.out.println(connection.getSessionId());
58-
}
50+
String gridURL = "https://" + username + ":" + accesskey + "@hub.lambdatest.com/wd/hub";
51+
System.out.println(gridURL);
52+
remoteWebdriver = new RemoteWebDriver(new URL(gridURL), capability);
53+
System.out.println(capability);
54+
Driver.initDriver(remoteWebdriver);
55+
System.out.println(DriverManager.getDriver().getSessionId());
56+
}
5957

58+
@DataProvider
59+
public Object[][] features() {
60+
return testNGCucumberRunner.provideScenarios();
61+
}
6062

61-
@DataProvider
62-
public Object[][] features() {
63-
return testNGCucumberRunner.provideScenarios();
64-
}
65-
66-
@AfterClass(alwaysRun = true)
67-
public void tearDownClass() {
68-
testNGCucumberRunner.finish();
69-
}
63+
@AfterClass(alwaysRun = true)
64+
public void tearDownClass() {
65+
testNGCucumberRunner.finish();
66+
}
7067
}

src/main/java/manager/Driver.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package manager;
2+
3+
import org.openqa.selenium.remote.RemoteWebDriver;
4+
5+
import java.util.Objects;
6+
import java.util.concurrent.TimeUnit;
7+
8+
public final class Driver {
9+
private Driver() {
10+
}
11+
12+
public static void initDriver(RemoteWebDriver driver) throws Exception {
13+
14+
if (Objects.isNull(DriverManager.getDriver())) {
15+
try {
16+
DriverManager.setDriver(driver);
17+
} catch (Exception e) {
18+
throw new Exception("Please check the capabilities of browser");
19+
}
20+
DriverManager.getDriver().manage().window().maximize();
21+
DriverManager.getDriver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
22+
}
23+
}
24+
25+
public static void quitDriver() {
26+
if (Objects.nonNull(DriverManager.getDriver())) {
27+
DriverManager.getDriver().quit();
28+
DriverManager.unload();
29+
}
30+
}
31+
32+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package manager;
2+
3+
import org.openqa.selenium.remote.RemoteWebDriver;
4+
5+
import java.util.Objects;
6+
7+
public class DriverManager {
8+
private DriverManager() {
9+
}
10+
11+
private static ThreadLocal<RemoteWebDriver> driver = new ThreadLocal<>();
12+
13+
public static RemoteWebDriver getDriver() {
14+
return driver.get();
15+
}
16+
17+
static void setDriver(RemoteWebDriver driverref) {
18+
if (Objects.nonNull(driverref)) {
19+
driver.set(driverref);
20+
}
21+
}
22+
23+
static void unload() {
24+
driver.remove();
25+
}
26+
}
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
package stepDefinitions;
22

3+
import io.cucumber.java.After;
4+
import io.cucumber.java.Before;
5+
import io.cucumber.java.Scenario;
6+
import manager.Driver;
7+
import manager.DriverManager;
38
import org.openqa.selenium.remote.RemoteWebDriver;
49

5-
import io.cucumber.java.*;
6-
7-
import MyRunner.TestRunner;
8-
9-
public class Hook extends TestRunner {
10-
public RemoteWebDriver driver = this.connection;
10+
public class Hook {
11+
public RemoteWebDriver driver = DriverManager.getDriver();
1112

1213
@Before
1314
public void updateName(Scenario scenario) throws InterruptedException {
14-
Thread.sleep(30);
1515
driver.executeScript("lambda-name=" + scenario.getName());
1616
}
1717

1818
@After
1919
public void close_the_browser(Scenario scenario) {
2020
driver.executeScript("lambda-status=" + (scenario.isFailed() ? "failed" : "passed"));
2121
System.out.println(driver.getSessionId());
22-
driver.quit();
22+
Driver.quitDriver();
2323
}
2424

2525
}
Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
package stepDefinitions;
22

3-
import org.openqa.selenium.*;
3+
import io.cucumber.java.en.Given;
4+
import io.cucumber.java.en.Then;
5+
import io.cucumber.java.en.When;
6+
import manager.DriverManager;
47
import org.openqa.selenium.By;
8+
import org.openqa.selenium.WebElement;
59
import org.openqa.selenium.remote.RemoteWebDriver;
610
import org.testng.Assert;
711

8-
import io.cucumber.java.en.*;
9-
import MyRunner.TestRunner;
12+
public class ToDoStepDefinition {
1013

14+
public RemoteWebDriver driver = DriverManager.getDriver();
1115

12-
public class ToDoStepDefinition extends TestRunner {
13-
14-
public RemoteWebDriver driver = this.connection;
15-
16-
1716
@Given("^user is on home Page$")
1817
public void user_already_on_home_page() throws InterruptedException {
1918
System.out.println(driver.getCapabilities());
20-
driver.get("https://lambdatest.github.io/sample-todo-app/");
21-
Thread.sleep(5000);
19+
DriverManager.getDriver().get("https://lambdatest.github.io/sample-todo-app/");
2220
}
2321

2422
@When("^select First Item$")
@@ -36,19 +34,14 @@ public void select_second_item() {
3634
@Then("^add new item$")
3735
public void add_new_item() throws InterruptedException {
3836
WebElement text = driver.findElement(By.id("sampletodotext"));
39-
text.clear();
40-
driver.findElement(By.id("sampletodotext")).sendKeys("Yey, Let's add it to list");
41-
Thread.sleep(1000);
37+
text.sendKeys("Yey, Let's add it to list");
4238
driver.findElement(By.id("addbutton")).click();
43-
Thread.sleep(2000);
4439
}
4540

4641
@Then("^verify added item$")
4742
public void verify_added_item() {
48-
String item = driver.findElement(By.xpath("/html/body/div/div/div/ul/li[6]/span")).getText();
49-
Assert.assertTrue(item.contains("Yey, Let's add it to list"), "Expected : Yey, Let's add it to list Actual : " + item);
43+
String item = driver.findElement(By.xpath("//input[@name='li6']/following-sibling::span")).getText();
44+
Assert.assertTrue(item.contains("Yey, Let's add it to list"),
45+
"Expected : Yey, Let's add it to list Actual : " + item);
5046
}
51-
52-
53-
54-
}
47+
}

0 commit comments

Comments
 (0)