|
1 | 1 | package com.browserstack.examples.tests; |
2 | 2 |
|
3 | | -import java.util.ArrayList; |
4 | | -import java.util.Arrays; |
5 | | -import java.util.List; |
| 3 | +import java.util.Iterator; |
6 | 4 |
|
7 | 5 | import org.testng.annotations.AfterClass; |
8 | 6 | import org.testng.annotations.BeforeClass; |
9 | 7 | import org.testng.annotations.DataProvider; |
| 8 | +import org.testng.annotations.Listeners; |
10 | 9 | import org.testng.annotations.Test; |
11 | 10 |
|
12 | | -import com.browserstack.examples.core.config.Platform; |
13 | | -import com.browserstack.examples.core.WebDriverFactory; |
14 | | -import com.browserstack.examples.core.ManagedWebDriver; |
15 | | -import com.browserstack.examples.core.WebDriverManager; |
| 11 | +import com.browserstack.webdriver.testng.LazyInitWebDriverIterator; |
| 12 | +import com.browserstack.webdriver.testng.ManagedWebDriver; |
| 13 | +import com.browserstack.webdriver.testng.listeners.WebDriverListener; |
16 | 14 | import io.cucumber.testng.CucumberOptions; |
17 | 15 | import io.cucumber.testng.FeatureWrapper; |
18 | 16 | import io.cucumber.testng.PickleWrapper; |
|
35 | 33 | "json:reports/tests/cucumber/json/cucumber.json" |
36 | 34 | } |
37 | 35 | ) |
| 36 | +@Listeners({WebDriverListener.class}) |
38 | 37 | public class RunWebDriverCucumberTests { |
39 | 38 |
|
40 | 39 | private TestNGCucumberRunner testNGCucumberRunner; |
41 | | - private WebDriverFactory webDriverFactory; |
42 | | - private WebDriverManager webDriverManager; |
| 40 | + private static final ThreadLocal<ManagedWebDriver> threadLocalWebDriver = new ThreadLocal<>(); |
43 | 41 |
|
44 | 42 | @BeforeClass(alwaysRun = true) |
45 | 43 | public void setUpClass() { |
46 | 44 | testNGCucumberRunner = new TestNGCucumberRunner(this.getClass()); |
47 | | - this.webDriverFactory = WebDriverFactory.getInstance(); |
48 | | - this.webDriverManager = WebDriverManager.getInstance(); |
| 45 | + } |
| 46 | + |
| 47 | + private synchronized static void setThreadLocalWebDriver(ManagedWebDriver managedWebDriver) { |
| 48 | + threadLocalWebDriver.set(managedWebDriver); |
| 49 | + } |
| 50 | + |
| 51 | + public synchronized static ManagedWebDriver getManagedWebDriver() { |
| 52 | + return threadLocalWebDriver.get(); |
49 | 53 | } |
50 | 54 |
|
51 | 55 | @Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "scenarios") |
52 | 56 | public void feature(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper, ManagedWebDriver managedWebDriver) { |
53 | 57 | managedWebDriver.setTestName(pickleWrapper.getPickle().getName()); |
54 | | - webDriverManager.setThreadLocalWebDriver(managedWebDriver); |
| 58 | + setThreadLocalWebDriver(managedWebDriver); |
55 | 59 | testNGCucumberRunner.runScenario(pickleWrapper.getPickle()); |
56 | 60 | } |
57 | 61 |
|
58 | 62 | @DataProvider(name = "scenarios", parallel = true) |
59 | | - public Object[][] scenarios() { |
60 | | - List<Object[]> browserScenarioParams = new ArrayList<>(); |
61 | | - |
| 63 | + public Iterator<Object[]> scenarios() { |
62 | 64 | Object[][] scenarios = testNGCucumberRunner.provideScenarios(); |
63 | | - for (Object[] testParams : scenarios) { |
64 | | - for (Platform platform : webDriverFactory.getPlatforms()) { |
65 | | - Object[] newTestParams = Arrays.copyOf(testParams, testParams.length + 1); |
66 | | - ManagedWebDriver managedWebDriver = new ManagedWebDriver(platform, webDriverFactory); |
67 | | - newTestParams[testParams.length] = managedWebDriver; |
68 | | - browserScenarioParams.add(newTestParams); |
69 | | - } |
70 | | - } |
71 | | - return browserScenarioParams.toArray(new Object[0][0]); |
| 65 | + return new LazyInitWebDriverIterator(true, scenarios); |
72 | 66 | } |
73 | 67 |
|
74 | 68 | @AfterClass(alwaysRun = true) |
|
0 commit comments