Skip to content

Commit d2d296e

Browse files
authored
Migrating to Selenium 4 (#109)
- Updated dependencies; - TimeUnit.* replaced with Duration.of* in selenium waits; - Decreased timeout in testShouldBePossibleToSetPageLoadTimeout test from 1s to 300ms; - Fixed Logger tests and Logger issues; - TimeUnit.* replaced with Duration.of* in selenium waits; - Decreased timeout in testShouldBePossibleToSetPageLoadTimeout test from 1s to 300ms; - Fixed automationpractice.com tests (added retry) - Decreased threads count for parallel tests - Increased retries count for doWithRetry() method;
1 parent 1950199 commit d2d296e

File tree

16 files changed

+215
-133
lines changed

16 files changed

+215
-133
lines changed

pom.xml

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.github.aquality-automation</groupId>
88
<artifactId>aquality-selenium</artifactId>
9-
<version>2.5.2</version>
9+
<version>3.0.0</version>
1010
<packaging>jar</packaging>
1111
<name>Aquality Selenium</name>
1212
<description>Library around Selenium WebDriver</description>
@@ -67,31 +67,39 @@
6767
<id>knysh</id>
6868
<name>Sergey Knysh</name>
6969
</developer>
70+
<developer>
71+
<id>d2kravchenko</id>
72+
<name>Dmitry Kravchenko</name>
73+
</developer>
74+
<developer>
75+
<id>aPavar</id>
76+
<name>Andrey Pavar</name>
77+
</developer>
7078
</developers>
7179

7280
<dependencies>
7381
<dependency>
7482
<groupId>com.github.aquality-automation</groupId>
7583
<artifactId>aquality-selenium-core</artifactId>
76-
<version>1.2.0</version>
84+
<version>2.0.1</version>
7785
</dependency>
7886

7987
<dependency>
8088
<groupId>org.seleniumhq.selenium</groupId>
8189
<artifactId>selenium-java</artifactId>
82-
<version>3.141.59</version>
90+
<version>4.1.0</version>
8391
</dependency>
8492

8593
<dependency>
8694
<groupId>io.github.bonigarcia</groupId>
8795
<artifactId>webdrivermanager</artifactId>
88-
<version>4.2.0</version>
96+
<version>5.0.2</version>
8997
</dependency>
9098

9199
<dependency>
92100
<groupId>com.fasterxml.jackson.core</groupId>
93101
<artifactId>jackson-databind</artifactId>
94-
<version>2.9.9</version>
102+
<version>2.13.0</version>
95103
</dependency>
96104

97105
<dependency>
@@ -100,24 +108,6 @@
100108
<version>6.14.3</version>
101109
<scope>test</scope>
102110
</dependency>
103-
<dependency>
104-
<groupId>log4j</groupId>
105-
<artifactId>log4j</artifactId>
106-
<version>1.2.17</version>
107-
</dependency>
108-
109-
<dependency>
110-
<groupId>org.slf4j</groupId>
111-
<artifactId>slf4j-api</artifactId>
112-
<version>1.7.26</version>
113-
</dependency>
114-
115-
<dependency>
116-
<groupId>org.slf4j</groupId>
117-
<artifactId>slf4j-log4j12</artifactId>
118-
<version>1.7.26</version>
119-
<scope>test</scope>
120-
</dependency>
121111
</dependencies>
122112

123113
<build>

src/main/java/aquality/selenium/browser/Browser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public Browser(RemoteWebDriver remoteWebDriver) {
4242
this.timeouts = AqualityServices.get(ITimeoutConfiguration.class);
4343
webDriver = remoteWebDriver;
4444
this.implicitTimeout = timeouts.getImplicit();
45-
getDriver().manage().timeouts().implicitlyWait(implicitTimeout.getSeconds(), TimeUnit.SECONDS);
45+
getDriver().manage().timeouts().implicitlyWait(implicitTimeout);
4646
setPageLoadTimeout(timeouts.getPageLoad());
4747
setScriptTimeout(timeouts.getScript());
4848
}
@@ -151,7 +151,7 @@ public IBrowserTabNavigation tabs() {
151151
public void setPageLoadTimeout(Duration timeout) {
152152
if (!getBrowserName().equals(BrowserName.SAFARI)) {
153153
localizedLogger.debug("loc.browser.page.load.timeout", timeout.getSeconds());
154-
getDriver().manage().timeouts().pageLoadTimeout(timeout.getSeconds(), TimeUnit.SECONDS);
154+
getDriver().manage().timeouts().pageLoadTimeout(timeout);
155155
}
156156
}
157157

@@ -164,7 +164,7 @@ public void setPageLoadTimeout(Duration timeout) {
164164
public void setImplicitWaitTimeout(Duration timeout) {
165165
if (!timeout.equals(getImplicitWaitTimeout())) {
166166
localizedLogger.debug("loc.browser.implicit.timeout", timeout.getSeconds());
167-
getDriver().manage().timeouts().implicitlyWait(timeout.getSeconds(), TimeUnit.SECONDS);
167+
getDriver().manage().timeouts().implicitlyWait(timeout);
168168
implicitTimeout = timeout;
169169
}
170170
}
@@ -176,7 +176,7 @@ public void setImplicitWaitTimeout(Duration timeout) {
176176
*/
177177
public void setScriptTimeout(Duration timeout) {
178178
localizedLogger.debug("loc.browser.script.timeout", timeout.getSeconds());
179-
getDriver().manage().timeouts().setScriptTimeout(timeout.getSeconds(), TimeUnit.SECONDS);
179+
getDriver().manage().timeouts().scriptTimeout(timeout);
180180
}
181181

182182
/**

src/main/java/aquality/selenium/browser/RemoteBrowserFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import org.openqa.selenium.remote.HttpCommandExecutor;
1212
import org.openqa.selenium.remote.LocalFileDetector;
1313
import org.openqa.selenium.remote.RemoteWebDriver;
14+
import org.openqa.selenium.remote.http.ClientConfig;
1415
import org.openqa.selenium.remote.http.HttpClient;
15-
import org.openqa.selenium.remote.http.HttpClient.Builder;
1616
import org.openqa.selenium.remote.http.HttpClient.Factory;
1717

1818
import java.net.URL;
@@ -60,14 +60,14 @@ class ClientFactory implements Factory {
6060
private final Factory defaultClientFactory = Factory.createDefault();
6161
private final Duration timeoutCommand = timeoutConfiguration.getCommand();
6262

63-
@Override
64-
public Builder builder() {
65-
return defaultClientFactory.builder().readTimeout(timeoutCommand);
63+
public HttpClient createClient(URL url) {
64+
return defaultClientFactory.createClient(ClientConfig.defaultConfig().baseUrl(url).readTimeout(timeoutCommand));
6665
}
6766

6867
@Override
69-
public HttpClient createClient(URL url) {
70-
return this.builder().createClient(url);
68+
public HttpClient createClient(ClientConfig clientConfig) {
69+
clientConfig.readTimeout(timeoutCommand);
70+
return defaultClientFactory.createClient(clientConfig);
7171
}
7272

7373
@Override

src/main/java/aquality/selenium/configuration/driversettings/DriverSettings.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
import aquality.selenium.core.logging.Logger;
66
import aquality.selenium.core.utilities.ISettingsFile;
77
import io.github.bonigarcia.wdm.config.Architecture;
8-
import org.apache.commons.lang3.StringUtils;
8+
import org.apache.commons.lang.StringUtils;
99
import org.openqa.selenium.MutableCapabilities;
1010
import org.openqa.selenium.PageLoadStrategy;
11-
1211
import java.io.File;
1312
import java.io.IOException;
1413
import java.util.Arrays;

src/main/java/aquality/selenium/configuration/driversettings/EdgeSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public EdgeSettings(ISettingsFile settingsFile){
1414
public EdgeOptions getCapabilities() {
1515
EdgeOptions edgeOptions = new EdgeOptions();
1616
setCapabilities(edgeOptions);
17-
edgeOptions.setPageLoadStrategy(getPageLoadStrategy().toString());
17+
edgeOptions.setPageLoadStrategy(getPageLoadStrategy());
1818
return edgeOptions;
1919
}
2020

src/test/java/aquality/selenium/logger/LoggerTests.java

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package aquality.selenium.logger;
22

33
import aquality.selenium.core.logging.Logger;
4-
import org.apache.log4j.*;
4+
import org.apache.logging.log4j.Level;
5+
import org.apache.logging.log4j.core.Appender;
6+
import org.apache.logging.log4j.core.Layout;
7+
import org.apache.logging.log4j.core.LoggerContext;
8+
import org.apache.logging.log4j.core.appender.FileAppender;
9+
import org.apache.logging.log4j.core.config.Configurator;
10+
import org.apache.logging.log4j.core.layout.PatternLayout;
511
import org.testng.annotations.AfterMethod;
612
import org.testng.annotations.BeforeGroups;
713
import org.testng.annotations.BeforeMethod;
@@ -22,22 +28,23 @@ public class LoggerTests {
2228
private final static String testMessage = "test message";
2329
private final static String testExceptionText = "test exception";
2430
private final static String log4jFieldName = "log4J";
25-
private org.apache.log4j.Logger log4j;
31+
private org.apache.logging.log4j.core.Logger log4j;
2632
private Appender appender;
2733
private File appenderFile;
2834

2935
@BeforeMethod
3036
private void addMessagesAppender() throws IOException {
3137
appenderFile = getRandomAppenderFile();
3238
appender = getFileAppender(appenderFile);
33-
Logger.getInstance().addAppender(appender);
39+
appender.start();
40+
LoggerContext.getContext(false).getRootLogger().addAppender(appender);
3441
}
3542

3643
@BeforeGroups("messages")
3744
private void initializeLog4jField() throws NoSuchFieldException, IllegalAccessException {
3845
Field log4jField = Logger.class.getDeclaredField(log4jFieldName);
3946
log4jField.setAccessible(true);
40-
log4j = ((ThreadLocal<org.apache.log4j.Logger>) log4jField.get(Logger.getInstance())).get();
47+
log4j = ((ThreadLocal<org.apache.logging.log4j.core.Logger>) log4jField.get(Logger.getInstance())).get();
4148
}
4249

4350
@Test
@@ -54,109 +61,112 @@ public void testShouldBePossibleToAddAppender() throws IOException {
5461

5562
@Test
5663
public void testShouldBePossibleToRemoveAppender() throws IOException {
57-
Logger.getInstance().addAppender(appender).removeAppender(appender).info(testMessage);
64+
appender.stop();
65+
LoggerContext.getContext(false).getRootLogger().removeAppender(appender);
5866
if(appenderFile.exists()){
5967
assertFalse(isFileContainsText(appenderFile, testMessage), String.format("New appender is not removed from log4j. File '%s' is not empty.", appenderFile.getPath()));
6068
}
6169
}
6270

6371
@Test(groups = "messages")
6472
public void testInfoMessageShouldBeDisplayedAccordingToLogLevel() throws IOException {
65-
log4j.setLevel(Level.FATAL);
73+
Configurator.setRootLevel(Level.FATAL);
6674
Logger.getInstance().info(testMessage);
6775
assertFalse(isFileContainsText(appenderFile, testMessage));
6876

69-
log4j.setLevel(Level.INFO);
77+
Configurator.setRootLevel(Level.INFO);
7078
Logger.getInstance().info(testMessage);
7179
assertTrue(isFileContainsText(appenderFile, testMessage));
7280
}
7381

7482
@Test(groups = "messages")
7583
public void testInfoMessageWithParametersShouldBeDisplayedAccordingToLogLevel() throws IOException {
76-
log4j.setLevel(Level.FATAL);
84+
Configurator.setRootLevel(Level.FATAL);
7785
Logger.getInstance().info("%s", testMessage);
7886
assertFalse(isFileContainsText(appenderFile, testMessage));
7987

80-
log4j.setLevel(Level.INFO);
88+
Configurator.setRootLevel(Level.INFO);
8189
Logger.getInstance().info("%s", testMessage);
8290
assertTrue(isFileContainsText(appenderFile, testMessage));
8391
}
8492

8593
@Test(groups = "messages")
8694
public void testDebugMessageWithParametersShouldBeDisplayedAccordingToLogLevel() throws IOException {
87-
log4j.setLevel(Level.WARN);
95+
Configurator.setRootLevel(Level.WARN);
8896
Logger.getInstance().debug("%s", testMessage);
8997
assertFalse(isFileContainsText(appenderFile, testMessage));
9098

91-
log4j.setLevel(Level.DEBUG);
99+
Configurator.setRootLevel(Level.DEBUG);
92100
Logger.getInstance().debug("%s", testMessage);
93101
assertTrue(isFileContainsText(appenderFile, testMessage));
94102
}
95103

96104
@Test(groups = "messages")
97105
public void testDebugMessageShouldBeDisplayedAccordingToLogLevel() throws IOException {
98-
log4j.setLevel(Level.WARN);
106+
Configurator.setRootLevel(Level.WARN);
99107
Logger.getInstance().debug(testMessage);
100108
assertFalse(isFileContainsText(appenderFile, testMessage));
101109

102-
log4j.setLevel(Level.DEBUG);
110+
Configurator.setRootLevel(Level.DEBUG);
103111
Logger.getInstance().debug(testMessage);
104112
assertTrue(isFileContainsText(appenderFile, testMessage));
105113
}
106114

107115
@Test(groups = "messages")
108116
public void testDebugMessageWithThrowableShouldBeDisplayedAccordingToLogLevel() throws IOException {
109-
log4j.setLevel(Level.WARN);
117+
Configurator.setRootLevel(Level.WARN);
110118
Logger.getInstance().debug(testMessage, new Exception(testExceptionText));
111119
assertFalse(isFileContainsText(appenderFile, testMessage));
112120
assertFalse(isFileContainsText(appenderFile, testExceptionText));
113121

114-
log4j.setLevel(Level.DEBUG);
122+
Configurator.setRootLevel(Level.DEBUG);
115123
Logger.getInstance().debug(testMessage, new Exception(testExceptionText));
116124
assertTrue(isFileContainsText(appenderFile, testMessage));
117125
assertTrue(isFileContainsText(appenderFile, testExceptionText));
118126
}
119127

120128
@Test(groups = "messages")
121129
public void testWarnMessageShouldBeDisplayedAccordingToLogLevel() throws IOException {
122-
log4j.setLevel(Level.ERROR);
130+
Configurator.setRootLevel(Level.ERROR);
123131
Logger.getInstance().warn(testMessage);
124132
assertFalse(isFileContainsText(appenderFile, testMessage));
125133

126-
log4j.setLevel(Level.WARN);
134+
Configurator.setRootLevel(Level.WARN);
127135
Logger.getInstance().warn(testMessage);
128136
assertTrue(isFileContainsText(appenderFile, testMessage));
129137
}
130138

131139
@Test(groups = "messages")
132140
public void testFatalMessageShouldBeDisplayedAccordingToLogLevel() throws IOException {
133-
log4j.setLevel(Level.OFF);
141+
Configurator.setRootLevel(Level.OFF);
134142
Logger.getInstance().fatal(testMessage, new Exception(testExceptionText));
135143
assertFalse(isFileContainsText(appenderFile, testMessage));
136144
assertFalse(isFileContainsText(appenderFile, testExceptionText));
137145

138-
log4j.setLevel(Level.FATAL);
146+
Configurator.setRootLevel(Level.FATAL);
139147
Logger.getInstance().fatal(testMessage, new Exception(testExceptionText));
140148
assertTrue(isFileContainsText(appenderFile, testMessage));
141149
assertTrue(isFileContainsText(appenderFile, testExceptionText));
142150
}
143151

144152
@Test(groups = "messages")
145153
public void testErrorMessageShouldBeDisplayedAccordingToLogLevel() throws IOException {
146-
log4j.setLevel(Level.FATAL);
154+
Configurator.setRootLevel(Level.FATAL);
147155
Logger.getInstance().error(testMessage);
148156
assertFalse(isFileContainsText(appenderFile, testMessage));
149157

150-
log4j.setLevel(Level.ERROR);
158+
Configurator.setRootLevel(Level.ERROR);
151159
Logger.getInstance().error(testMessage);
152160
assertTrue(isFileContainsText(appenderFile, testMessage));
153161
}
154162

155163
private Appender getFileAppender(File file) throws IOException {
156-
Layout layout = new PatternLayout("%m%n");
157-
RollingFileAppender fileAppender = new RollingFileAppender(layout, file.getPath());
158-
fileAppender.setName("test");
159-
fileAppender.setAppend(true);
164+
Layout layout = PatternLayout.newBuilder().withPattern("%m%n").build();
165+
FileAppender fileAppender = FileAppender.newBuilder().setName("test")
166+
.setLayout(layout)
167+
.withFileName(file.getPath())
168+
.withAppend(true)
169+
.build();
160170
return fileAppender;
161171
}
162172

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package automationpractice.forms;
2+
3+
import aquality.selenium.forms.Form;
4+
import org.openqa.selenium.By;
5+
6+
public class ResourceLimitIsReachedForm extends Form {
7+
8+
public ResourceLimitIsReachedForm() {
9+
super(By.xpath("//h1[.='Resource Limit Is Reached']"), "508 - Resource Limit Is Reached");
10+
}
11+
}

0 commit comments

Comments
 (0)