Skip to content

Commit 096f35c

Browse files
author
Craig Mc Carthy
committed
init commit
1 parent 254052b commit 096f35c

File tree

6 files changed

+33
-84
lines changed

6 files changed

+33
-84
lines changed

pom.xml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<parent>
3535
<artifactId>spring-boot-starter-parent</artifactId>
3636
<groupId>org.springframework.boot</groupId>
37-
<version>3.3.3</version>
37+
<version>3.5.0</version>
3838
<relativePath/>
3939
</parent>
4040

@@ -43,11 +43,13 @@
4343
<compiler.plugin.version>3.8.1</compiler.plugin.version>
4444
<java.version>17</java.version>
4545
<resource.plugin.version>3.1.0</resource.plugin.version>
46-
<junit.platform.suite.version>1.11.0</junit.platform.suite.version>
46+
<junit.platform.suite.version>1.13.0</junit.platform.suite.version>
4747
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4848
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
49-
<restassured.version>5.2.0</restassured.version>
50-
<surfire.plugin.version>3.0.0-M5</surfire.plugin.version>
49+
<restassured.version>5.5.2</restassured.version>
50+
<cucumber.version>7.22.2</cucumber.version>
51+
<selenium.version>4.33.0</selenium.version>
52+
<surfire.plugin.version>3.5.3</surfire.plugin.version>
5153
</properties>
5254

5355
<build>
@@ -100,7 +102,7 @@
100102
<plugin>
101103
<groupId>io.qameta.allure</groupId>
102104
<artifactId>allure-maven</artifactId>
103-
<version>2.10.0</version>
105+
<version>2.14.0</version>
104106
<configuration>
105107
<reportVersion>2.10.0</reportVersion>
106108
<resultsDirectory>${project.build.directory}/allure-results</resultsDirectory>
@@ -115,7 +117,7 @@
115117
<dependency>
116118
<groupId>org.springframework.boot</groupId>
117119
<artifactId>spring-boot-dependencies</artifactId>
118-
<version>3.3.3</version>
120+
<version>3.5.0</version>
119121
<type>pom</type>
120122
<scope>import</scope>
121123
</dependency>
@@ -126,7 +128,7 @@
126128
<dependency>
127129
<artifactId>json</artifactId>
128130
<groupId>org.json</groupId>
129-
<version>20231013</version>
131+
<version>20250517</version>
130132
</dependency>
131133

132134
<!-- Cucumber dependencies-->
@@ -138,12 +140,12 @@
138140
<dependency>
139141
<artifactId>cucumber-spring</artifactId>
140142
<groupId>io.cucumber</groupId>
141-
<version>7.8.1</version>
143+
<version>${cucumber.version}</version>
142144
</dependency>
143145
<dependency>
144146
<groupId>org.junit.jupiter</groupId>
145147
<artifactId>junit-jupiter</artifactId>
146-
<version>5.9.2</version>
148+
<version>5.12.2</version>
147149
<scope>test</scope>
148150
</dependency>
149151

@@ -156,7 +158,7 @@
156158
<dependency>
157159
<artifactId>cucumber-junit-platform-engine</artifactId>
158160
<groupId>io.cucumber</groupId>
159-
<version>7.11.1</version>
161+
<version>${cucumber.version}</version>
160162
</dependency>
161163
<dependency>
162164
<groupId>org.aspectj</groupId>
@@ -173,14 +175,14 @@
173175
<dependency>
174176
<groupId>io.qameta.allure</groupId>
175177
<artifactId>allure-cucumber7-jvm</artifactId>
176-
<version>2.21.0</version>
178+
<version>2.29.1</version>
177179
</dependency>
178180

179181
<!--test dependencies -->
180182
<dependency>
181183
<artifactId>commons-io</artifactId>
182184
<groupId>commons-io</groupId>
183-
<version>2.11.0</version>
185+
<version>2.16.1</version>
184186
</dependency>
185187
<dependency>
186188
<artifactId>assertj-core</artifactId>
@@ -197,7 +199,6 @@
197199
<dependency>
198200
<artifactId>spring-rabbit</artifactId>
199201
<groupId>org.springframework.amqp</groupId>
200-
<version>3.0.2</version>
201202
</dependency>
202203
<dependency>
203204
<artifactId>spring-boot-starter-web</artifactId>

wikipedia/pom.xml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,10 @@
4646
<version>1.0-SNAPSHOT</version>
4747
</dependency>
4848
<!-- Selenium dependencies-->
49-
<dependency>
50-
<artifactId>ngwebdriver</artifactId>
51-
<groupId>com.paulhammant</groupId>
52-
<version>1.2</version>
53-
</dependency>
54-
<dependency>
55-
<groupId>com.codeborne</groupId>
56-
<artifactId>selenide</artifactId>
57-
<version>7.1.0</version>
58-
</dependency>
5949
<dependency>
6050
<artifactId>selenium-java</artifactId>
6151
<groupId>org.seleniumhq.selenium</groupId>
62-
<version>4.6.0</version>
52+
<version>${selenium.version}</version>
6353
</dependency>
6454
</dependencies>
6555

wikipedia/src/test/java/com/cmccarthy/ui/utils/DriverHelper.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void sendKeys(WebElement element, String value) {
4646
/**
4747
* Clicks on an element by WebElement
4848
*/
49-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
49+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
5050
public void click(WebElement element) throws NoSuchFieldException {
5151
try {
5252
driverWait.waitForElementToLoad(element);
@@ -60,7 +60,7 @@ public void click(WebElement element) throws NoSuchFieldException {
6060
/**
6161
* Clicks on an element by Locator
6262
*/
63-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
63+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
6464
public void click(By locator) throws NoSuchFieldException {
6565
try {
6666
driverWait.waitForElementToLoad(locator);
@@ -74,7 +74,7 @@ public void click(By locator) throws NoSuchFieldException {
7474
/**
7575
* Clicks on an element by Locator
7676
*/
77-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
77+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
7878
public void rightClick(By locator) throws NoSuchFieldException {
7979
driverWait.waitForElementToLoad(locator);
8080
final WebElement element = driverManager.getDriver().findElement(locator);
@@ -88,7 +88,7 @@ public void rightClick(By locator) throws NoSuchFieldException {
8888
}
8989
}
9090

91-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
91+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
9292
public void scrollElementIntoView(WebElement element) {
9393
try {
9494
driverManager.getJSExecutor().executeScript("arguments[0].scrollIntoView(true);", element);
@@ -101,7 +101,7 @@ public void scrollElementIntoView(WebElement element) {
101101
/**
102102
* Clicks on an element by WebElement
103103
*/
104-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
104+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
105105
public void rightClick(WebElement element) throws NoSuchFieldException {
106106
driverWait.waitForElementToLoad(element);
107107

@@ -119,7 +119,7 @@ public void rightClick(WebElement element) throws NoSuchFieldException {
119119
* Clicks on an element using Actions
120120
*/
121121

122-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
122+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
123123
public void clickAction(WebElement element) throws NoSuchFieldException {
124124
driverWait.waitForElementToLoad(element);
125125
try {
@@ -135,7 +135,7 @@ public void clickAction(WebElement element) throws NoSuchFieldException {
135135
/**
136136
* Clicks on an element using Actions
137137
*/
138-
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), include = {RetryException.class})
138+
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500), retryFor = {RetryException.class})
139139
public void clickAction(By locator) throws NoSuchFieldException {
140140
driverWait.waitForElementToLoad(locator);
141141

wikipedia/src/test/java/com/cmccarthy/ui/utils/DriverManager.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.cmccarthy.ui.utils;
22

33
import com.cmccarthy.common.utils.ApplicationProperties;
4-
import com.codeborne.selenide.WebDriverRunner;
54
import org.openqa.selenium.Capabilities;
65
import org.openqa.selenium.JavascriptExecutor;
76
import org.openqa.selenium.WebDriver;
87
import org.openqa.selenium.chrome.ChromeDriver;
9-
import org.openqa.selenium.chrome.ChromeDriverService;
108
import org.openqa.selenium.chrome.ChromeOptions;
119
import org.openqa.selenium.edge.EdgeDriver;
1210
import org.openqa.selenium.edge.EdgeOptions;
@@ -54,51 +52,36 @@ public void createDriver() throws IOException {
5452
} else {
5553
setLocalWebDriver();
5654
}
57-
WebDriverRunner.setWebDriver(getDriver());
58-
WebDriverRunner.getWebDriver().manage().deleteAllCookies();//useful for AJAX pages
55+
getDriver().manage().deleteAllCookies();//useful for AJAX pages
5956
}
6057
}
6158

6259
public void setLocalWebDriver() throws IOException {
6360
switch (applicationProperties.getBrowser()) {
6461
case ("chrome") -> {
65-
String path = Arrays.toString(this.environment.getActiveProfiles()).contains("headless-github") ?
66-
System.getProperty("user.dir") + "/src/test/resources/drivers" : Constants.DRIVER_DIRECTORY;
67-
ChromeDriverService src = new ChromeDriverService.Builder()
68-
.usingDriverExecutable(new File(path + "/chromedriver" + getExtension()))
69-
.usingAnyFreePort().build();
70-
src.start();
71-
72-
System.setProperty("webdriver.chrome.driver", path + "/chromedriver" + getExtension());
73-
7462
ChromeOptions options = new ChromeOptions();
7563
options.addArguments("--disable-logging");
7664
options.addArguments("--no-sandbox");
7765
options.addArguments("--disable-dev-shm-usage");
7866
options.addArguments("--headless=new");
79-
driverThreadLocal.set(new ChromeDriver(src, options));
67+
driverThreadLocal.set(new ChromeDriver(options));
8068
}
8169
case ("firefox") -> {
82-
System.setProperty("webdriver.gecko.driver", Constants.DRIVER_DIRECTORY + "/geckodriver" + getExtension());
8370
FirefoxOptions firefoxOptions = new FirefoxOptions();
84-
firefoxOptions.setBinary("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
8571
firefoxOptions.setCapability("marionette", true);
8672
driverThreadLocal.set(new FirefoxDriver(firefoxOptions));
8773
}
8874
case ("ie") -> {
89-
System.setProperty("webdriver.ie.driver", Constants.DRIVER_DIRECTORY + "/IEDriverServer" + getExtension());
9075
InternetExplorerOptions capabilitiesIE = new InternetExplorerOptions();
9176
capabilitiesIE.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
9277
driverThreadLocal.set(new InternetExplorerDriver(capabilitiesIE));
9378
}
9479
case ("safari") -> {
9580
SafariOptions operaOptions = new SafariOptions();
96-
System.setProperty("webdriver.opera.driver", Constants.DRIVER_DIRECTORY + "/operadriver" + getExtension());
9781
driverThreadLocal.set(new SafariDriver(operaOptions));
9882
}
9983
case ("edge") -> {
10084
EdgeOptions edgeOptions = new EdgeOptions();
101-
System.setProperty("webdriver.edge.driver", Constants.DRIVER_DIRECTORY + "/MicrosoftWebDriver" + getExtension());
10285
driverThreadLocal.set(new EdgeDriver(edgeOptions));
10386
}
10487
default ->

wikipedia/src/test/java/com/cmccarthy/ui/utils/DriverWait.java

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.cmccarthy.ui.utils;
22

33
import com.cmccarthy.ui.utils.expectedConditions.*;
4-
import com.paulhammant.ngwebdriver.NgWebDriver;
54
import org.openqa.selenium.*;
65
import org.openqa.selenium.support.ui.ExpectedCondition;
76
import org.openqa.selenium.support.ui.FluentWait;
@@ -11,9 +10,9 @@
1110
import org.springframework.beans.factory.annotation.Autowired;
1211
import org.springframework.context.annotation.Lazy;
1312
import org.springframework.stereotype.Component;
14-
1513
import java.time.Duration;
1614
import java.util.NoSuchElementException;
15+
import java.util.Objects;
1716

1817

1918
@Component
@@ -33,8 +32,6 @@ public DriverWait(DriverManager driverManager) {
3332
this.driverManager = driverManager;
3433
}
3534

36-
37-
3835
public void waitForAngular() {
3936
waitUntilAngularReady();
4037
}
@@ -51,19 +48,6 @@ public void waitForElementToLoad(By locator) throws NoSuchFieldException {
5148
waitForElementClickable(locator);
5249
}
5350

54-
/**
55-
* Wait for Angular loads using Ng Driver
56-
*/
57-
private void ngDriverWait() {
58-
final NgWebDriver ngWebDriver = new NgWebDriver(driverManager.getJSExecutor());
59-
try {
60-
ngWebDriver.waitForAngularRequestsToFinish();
61-
} catch (ScriptTimeoutException exception) {
62-
logger.info("Problems waiting for Angular to load with NgWeb Driver");
63-
logger.debug("Problems waiting for Angular to load with NgWeb Driver");
64-
}
65-
}
66-
6751
/**
6852
* wait for element visible by element
6953
*/
@@ -145,14 +129,13 @@ private void waitUntilAngularReady() {
145129
final Boolean angularUnDefined = (Boolean) driverManager.getJSExecutor()
146130
.executeScript("return window.angular === undefined");
147131

148-
if (!angularUnDefined) {
132+
if (Boolean.FALSE.equals(angularUnDefined)) {
149133
Boolean angularInjectorUnDefined = (Boolean) driverManager.getJSExecutor()
150134
.executeScript("return angular.element(document).injector() === undefined");
151-
if (!angularInjectorUnDefined) {
135+
if (Boolean.FALSE.equals(angularInjectorUnDefined)) {
152136
waitForAngularLoad();
153137
waitUntilJSReady();
154138
waitForJQueryLoad();
155-
ngDriverWait();
156139
}
157140
}
158141
}
@@ -162,23 +145,23 @@ private void waitForAngularLoad() {
162145
final String angularReadyScript = "return angular.element(document).injector().get('$http').pendingRequests.length === 0";
163146

164147
final ExpectedCondition<Boolean> angularLoad = driver -> Boolean.valueOf(
165-
(driverManager.getJSExecutor()).executeScript(angularReadyScript).toString());
148+
Objects.requireNonNull((driverManager.getJSExecutor()).executeScript(angularReadyScript)).toString());
166149

167150
boolean angularReady = Boolean
168-
.parseBoolean(driverManager.getJSExecutor().executeScript(angularReadyScript).toString());
151+
.parseBoolean(Objects.requireNonNull(driverManager.getJSExecutor().executeScript(angularReadyScript)).toString());
169152

170153
if (!angularReady) {
171154
waitLong().until(angularLoad);
172155
}
173156
}
174157

175158
private void waitUntilJSReady() {
176-
final ExpectedCondition<Boolean> jsLoad = driver -> (driverManager.getJSExecutor())
177-
.executeScript("return document.readyState")
159+
final ExpectedCondition<Boolean> jsLoad = driver -> Objects.requireNonNull((driverManager.getJSExecutor())
160+
.executeScript("return document.readyState"))
178161
.toString()
179162
.equals("complete");
180163

181-
boolean jsReady = driverManager.getJSExecutor().executeScript("return document.readyState")
164+
boolean jsReady = Objects.requireNonNull(driverManager.getJSExecutor().executeScript("return document.readyState"))
182165
.toString().equals("complete");
183166

184167
if (!jsReady) {

wikipedia/src/test/java/com/cmccarthy/ui/utils/Hooks.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,17 @@
1111
import java.io.IOException;
1212

1313
@CucumberContextConfiguration
14+
@SuppressWarnings("unused")
1415
public class Hooks extends WikipediaAbstractTestDefinition {
1516

1617
private static final Object lock = new Object();
17-
private static boolean initialized = false;
1818
@Autowired
1919
private HookUtil hookUtil;
2020
@Autowired
2121
private DriverManager driverManager;
2222

2323
@Before
2424
public void beforeScenario(Scenario scenario) throws IOException {
25-
synchronized (lock) {
26-
if (!initialized) {
27-
if (!driverManager.isDriverExisting()) {
28-
driverManager.downloadDriver();
29-
}
30-
initialized = true;
31-
}
32-
}
3325
driverManager.createDriver();
3426
}
3527

0 commit comments

Comments
 (0)