/
FilterUrlDevToolsTest.java
138 lines (118 loc) · 5.28 KB
/
FilterUrlDevToolsTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.github.sergueik.selenium;
/**
* Copyright 2021,2024 Serguei Kouzmine
*/
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Optional;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.devtools.v124.network.Network;
import org.openqa.selenium.devtools.v124.network.model.BlockedReason;
import org.openqa.selenium.devtools.v124.network.model.Headers;
import org.openqa.selenium.devtools.v124.network.model.InterceptionStage;
import org.openqa.selenium.devtools.v124.network.model.LoadingFailed;
import org.openqa.selenium.devtools.v124.network.model.RequestIntercepted;
import org.openqa.selenium.devtools.v124.network.model.RequestPattern;
import org.openqa.selenium.devtools.v124.network.model.RequestWillBeSent;
import org.openqa.selenium.devtools.v124.network.model.ResourceType;
import org.openqa.selenium.devtools.v124.network.model.ResponseReceived;
import org.openqa.selenium.devtools.v124.page.Page;
import com.google.common.collect.ImmutableList;
/**
* Selected test scenarios for Selenium Chrome Developer Tools Selenium 4 bridge
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-setBlockedURLs
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#event-loadingFailed
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#event-requestWillBeSent
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#event-responseReceived
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-continueInterceptedRequest
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#type-RequestPattern
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-setCacheDisabled
* https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-clearBrowserCache
* @author: Serguei Kouzmine (kouzmine_serguei@yahoo.com)
*/
public class FilterUrlDevToolsTest extends BaseDevToolsTest {
@Before
public void before() throws Exception {
chromeDevTools.send(Network.enable(Optional.of(100000000), Optional.empty(),
Optional.empty()));
chromeDevTools.send(Network.clearBrowserCache());
chromeDevTools.send(Network.setCacheDisabled(true));
baseURL = "http://arngren.net";
}
@After
public void after() {
chromeDevTools.send(Network.setBlockedURLs(new ArrayList<String>()));
chromeDevTools.send(Network.disable());
chromeDevTools.send(Network.setCacheDisabled(false));
chromeDevTools.clearListeners();
}
// see also:
// https://github.com/adiohana/selenium-chrome-devtools-examples/blob/master/src/test/java/ChromeDevToolsTest.java
@Test
public void test1() {
// Arrange
chromeDevTools.send(Network.setBlockedURLs(
ImmutableList.of("*.css", "*.png", "*.jpg", "*.gif", "*favicon.ico")));
// verify that css jpg and png are blocked
chromeDevTools.addListener(Network.loadingFailed(),
(LoadingFailed event) -> {
ResourceType resourceType = event.getType();
if (resourceType.equals(ResourceType.STYLESHEET)
|| resourceType.equals(ResourceType.IMAGE)
|| resourceType.equals(ResourceType.OTHER)) {
Optional<BlockedReason> blockedReason = event.getBlockedReason();
assertThat(blockedReason.isPresent(), is(true));
assertThat(blockedReason.get(), is(BlockedReason.INSPECTOR));
} else {
// TODO
}
System.err.println("Blocked event: " + event.getType());
});
chromeDevTools.addListener(Network.requestWillBeSent(),
(RequestWillBeSent event) -> {
System.err.println("Request will be sent to get url: "
+ event.getRequest().getUrl());
});
chromeDevTools.addListener(Network.responseReceived(),
(ResponseReceived event) -> {
System.err.println(
"Response received with url: " + event.getResponse().getUrl());
}); // Act
// see also:
// https://weblium.com/blog/21-bad-website-examples-of-2021/
driver.get(baseURL);
Utils.sleep(1000);
}
// see also:
// https://github.com/adiohana/selenium-chrome-devtools-examples/blob/master/src/test/java/ChromeDevToolsTest.java#L81
// see also:
// https://rahulshettyacademy.com/blog/index.php/2021/11/04/selenium-4-key-feature-network-interception/
// NOTE: need to print to read the whole document
@SuppressWarnings("deprecation")
@Test
public void test2() {
// TODO: java.lang.ClassCastException:
// java.util.LinkedHashMap cannot be
// cast to java.lang.Void
chromeDevTools.addListener(Network.requestIntercepted(),
(RequestIntercepted event) -> chromeDevTools
.send(Network.continueInterceptedRequest(event.getInterceptionId(),
Optional.empty(), Optional.empty(), Optional.empty(),
Optional.empty(), Optional.empty(),
Optional.of(new Headers(new HashMap<String, Object>())),
Optional.empty())));
// set request interception only for css requests
RequestPattern requestPattern = new RequestPattern(Optional.of("*.gif"),
Optional.of(ResourceType.IMAGE),
Optional.of(InterceptionStage.HEADERSRECEIVED));
chromeDevTools
.send(Network.setRequestInterception(ImmutableList.of(requestPattern)));
chromeDevTools.send(Page.navigate(baseURL, Optional.empty(),
Optional.empty(), Optional.empty(), Optional.empty()));
Utils.sleep(1000);
}
}