Skip to content

Commit 5469f99

Browse files
author
Dmitry Kravchenko
committed
added geolocation emulation, basic authentication, request \ response handlers, network interception;
1 parent d2d296e commit 5469f99

File tree

17 files changed

+360
-19
lines changed

17 files changed

+360
-19
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@
117117
<artifactId>maven-compiler-plugin</artifactId>
118118
<version>3.1</version>
119119
<configuration>
120-
<source>1.8</source>
121-
<target>1.8</target>
120+
<source>9</source>
121+
<target>9</target>
122122
</configuration>
123123
</plugin>
124124
<plugin>

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package aquality.selenium.browser;
22

3+
import aquality.selenium.browser.devtools.BrowserDevTools;
34
import aquality.selenium.configuration.IBrowserProfile;
45
import aquality.selenium.configuration.ITimeoutConfiguration;
56
import aquality.selenium.core.applications.IApplication;
@@ -20,7 +21,6 @@
2021
import java.io.IOException;
2122
import java.nio.charset.StandardCharsets;
2223
import java.time.Duration;
23-
import java.util.concurrent.TimeUnit;
2424
import java.util.function.Supplier;
2525

2626
public class Browser implements IApplication {
@@ -368,4 +368,8 @@ public final BrowserName getBrowserName() {
368368
private Duration getImplicitWaitTimeout() {
369369
return implicitTimeout;
370370
}
371+
372+
public BrowserDevTools devTools() {
373+
return new BrowserDevTools(getDriver(), browserProfile);
374+
}
371375
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package aquality.selenium.browser.devtools;
2+
3+
import aquality.selenium.configuration.IBrowserProfile;
4+
import org.openqa.selenium.WebDriver;
5+
import org.openqa.selenium.devtools.DevTools;
6+
7+
public class BrowserDevTools {
8+
9+
DevTools tools;
10+
11+
public BrowserDevTools(WebDriver driver, IBrowserProfile browserProfile) {
12+
tools = DevToolsFactory.getDevTools(driver, browserProfile);
13+
tools.createSessionIfThereIsNotOne();
14+
}
15+
16+
public EmulationTools emulation() {
17+
return new EmulationTools(tools);
18+
}
19+
20+
public NetworkTools network() {
21+
return new NetworkTools(tools);
22+
}
23+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package aquality.selenium.browser.devtools;
2+
3+
import aquality.selenium.configuration.IBrowserProfile;
4+
import org.openqa.selenium.WebDriver;
5+
import org.openqa.selenium.devtools.DevTools;
6+
import org.openqa.selenium.devtools.HasDevTools;
7+
8+
public class DevToolsFactory {
9+
10+
public static DevTools getDevTools(WebDriver driver, IBrowserProfile browserProfile) {
11+
DevTools tools;
12+
try {
13+
tools = ((HasDevTools)driver).getDevTools();
14+
} catch (ClassCastException e) {
15+
throw new IllegalArgumentException(String.format("Browser [%s] is not supported.", browserProfile.getBrowserName()));
16+
}
17+
return tools;
18+
}
19+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package aquality.selenium.browser.devtools;
2+
3+
import aquality.selenium.browser.AqualityServices;
4+
import aquality.selenium.core.localization.ILocalizedLogger;
5+
import org.openqa.selenium.devtools.DevTools;
6+
import org.openqa.selenium.devtools.v96.emulation.Emulation;
7+
8+
import java.util.Optional;
9+
10+
public class EmulationTools {
11+
12+
private final DevTools tools;
13+
private final ILocalizedLogger localizedLogger = AqualityServices.getLocalizedLogger();
14+
15+
public EmulationTools(DevTools tools) {
16+
this.tools = tools;
17+
}
18+
19+
20+
public void setGeolocationOverride(double lat, double lng, int accuracy) {
21+
localizedLogger.info("loc.browser.emulation.geolocation.set");
22+
tools.send(Emulation.setGeolocationOverride(Optional.of(lat), Optional.of(lng), Optional.of(accuracy)));
23+
}
24+
25+
public void setGeolocationOverride(double lat, double lng) {
26+
localizedLogger.info("loc.browser.emulation.geolocation.set");
27+
setGeolocationOverride(lat, lng, 0);
28+
}
29+
30+
public void clearGeolocationOverride() {
31+
localizedLogger.info("loc.browser.emulation.geolocation.clear");
32+
tools.send(Emulation.clearGeolocationOverride());
33+
}
34+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package aquality.selenium.browser.devtools;
2+
3+
import aquality.selenium.browser.AqualityServices;
4+
import aquality.selenium.core.localization.ILocalizedLogger;
5+
import org.openqa.selenium.UsernameAndPassword;
6+
import org.openqa.selenium.devtools.DevTools;
7+
import org.openqa.selenium.devtools.NetworkInterceptor;
8+
import org.openqa.selenium.devtools.v96.network.Network;
9+
import org.openqa.selenium.devtools.v96.network.model.RequestWillBeSent;
10+
import org.openqa.selenium.devtools.v96.network.model.ResponseReceived;
11+
import org.openqa.selenium.remote.http.HttpResponse;
12+
import org.openqa.selenium.remote.http.Route;
13+
14+
import java.net.URI;
15+
import java.util.Optional;
16+
import java.util.function.Consumer;
17+
import java.util.function.Predicate;
18+
19+
import static aquality.selenium.browser.AqualityServices.getBrowser;
20+
21+
public class NetworkTools {
22+
23+
private final DevTools tools;
24+
private final ILocalizedLogger localizedLogger = AqualityServices.getLocalizedLogger();
25+
26+
public NetworkTools(DevTools tools) {
27+
this.tools = tools;
28+
}
29+
30+
public void addBasicAuthentication(String hostPart, String username, String password) {
31+
localizedLogger.info("loc.browser.network.authentication.add");
32+
Predicate<URI> uriPredicate = uri -> uri.getHost().contains(hostPart);
33+
tools.getDomains().network().addAuthHandler(uriPredicate, UsernameAndPassword.of(username, password));
34+
}
35+
36+
public void clearBasicAuthentication() {
37+
localizedLogger.info("loc.browser.network.authentication.clear");
38+
tools.getDomains().network().disable();
39+
}
40+
41+
public void addRequestHandler(Consumer<RequestWillBeSent> handler) {
42+
localizedLogger.info("loc.browser.network.event.requestsent.add");
43+
tools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
44+
tools.addListener(Network.requestWillBeSent(), handler);
45+
}
46+
47+
public void addResponseHandler(Consumer<ResponseReceived> handler) {
48+
localizedLogger.info("loc.browser.network.event.responsereceived.add");
49+
tools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
50+
tools.addListener(Network.responseReceived(), handler);
51+
}
52+
53+
public void clearHandlers() {
54+
tools.clearListeners();
55+
}
56+
57+
public NetworkInterceptor startNetworkInterceptor(HttpResponse response) {
58+
return new NetworkInterceptor(
59+
getBrowser().getDriver(),
60+
Route.matching(req -> true)
61+
.to(() -> req -> response));
62+
}
63+
64+
public void closeNetworkInterceptor(NetworkInterceptor interceptor) {
65+
interceptor.close();
66+
}
67+
}

src/main/resources/localization/be.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,12 @@
7878
"loc.browser.get.tab.handles": "Атрыманне спісу дэскрыптараў адкрытых укладак",
7979
"loc.browser.get.tab.handle": "Атрыманне дэскрыптара бягучай укладкі",
8080
"loc.browser.tab.open.new": "Адкрыццё новай укладкі",
81-
"loc.browser.tab.close": "Закрыццё ўкладкі"
81+
"loc.browser.tab.close": "Закрыццё ўкладкі",
82+
"loc.browser.network.authentication.add": "Дадаем апрацоўшчык базавай аўтэнтыфікацыі",
83+
"loc.browser.network.authentication.clear": "Ачысика апрацоўшчыка базавай аўтэнтыфікацыі",
84+
"loc.browser.emulation.geolocation.set": "Дадаем перавызначэнне геалакацыі",
85+
"loc.browser.emulation.geolocation.clear": "Ачыстка перавызначэння геалакацыі",
86+
"loc.browser.network.event.requestsent.add": "Падпісваемся на падзею адпраўкі сеткавага запыта",
87+
"loc.browser.network.event.responsereceived.add": "Падпісваемся на падзею атрымання сеткавага адказа",
88+
"loc.browser.network.event.listeners.clear": "Ачыстка спіса адсочваных падзей"
8289
}

src/main/resources/localization/en.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,12 @@
7878
"loc.browser.get.tab.handles": "Getting tab handles",
7979
"loc.browser.get.tab.handle": "Getting current tab handle",
8080
"loc.browser.tab.open.new": "Opening new tab",
81-
"loc.browser.tab.close": "Closing tab"
81+
"loc.browser.tab.close": "Closing tab",
82+
"loc.browser.network.authentication.add": "Adding Basic Authentication handler",
83+
"loc.browser.network.authentication.clear": "Clearing Basic Authentication handlers",
84+
"loc.browser.emulation.geolocation.set": "Setting Geolocation override",
85+
"loc.browser.emulation.geolocation.clear": "Clearing Geolocation override",
86+
"loc.browser.network.event.requestsent.add": "Subscribing to Network Request Sent event",
87+
"loc.browser.network.event.responsereceived.add": "Subscribing to Network Response Received event",
88+
"loc.browser.network.event.listeners.clear": "Clearing event listeners"
8289
}

src/main/resources/localization/ru.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,12 @@
7878
"loc.browser.get.tab.handles": "Получение списка дескрипторов открытых вкладок",
7979
"loc.browser.get.tab.handle": "Получение дескриптора текущей вкладки",
8080
"loc.browser.tab.open.new": "Открытие новой вкладки",
81-
"loc.browser.tab.close": "Закрытие вкладки"
81+
"loc.browser.tab.close": "Закрытие вкладки",
82+
"loc.browser.network.authentication.add": "Добавление обработчика базовой аутентификации",
83+
"loc.browser.network.authentication.clear": "Очистка обработчиков базовой аутентификации",
84+
"loc.browser.emulation.geolocation.set": "Установка переопределения геолокации",
85+
"loc.browser.emulation.geolocation.clear": "Сброс переопределения геолокации",
86+
"loc.browser.network.event.requestsent.add": "Подписываемся на событие отправки сетевого запроса",
87+
"loc.browser.network.event.responsereceived.add": "Подписываемся на событие получения сетевого ответа",
88+
"loc.browser.network.event.listeners.clear": "Очистка списка отслеживаемых событий"
8289
}

src/main/resources/log4j.properties

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

0 commit comments

Comments
 (0)