Skip to content

Commit ab2efd4

Browse files
authored
test: referer option and more navigation tests (microsoft#545)
1 parent 1eb3f3b commit ab2efd4

File tree

1 file changed

+190
-0
lines changed

1 file changed

+190
-0
lines changed
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
/*
2+
* Copyright (c) Microsoft Corporation.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.microsoft.playwright;
18+
19+
import com.microsoft.playwright.options.WaitUntilState;
20+
import org.junit.jupiter.api.Test;
21+
22+
import java.nio.file.Path;
23+
import java.nio.file.Paths;
24+
import java.util.concurrent.ExecutionException;
25+
import java.util.concurrent.Future;
26+
27+
import static java.util.Arrays.asList;
28+
import static org.junit.jupiter.api.Assertions.*;
29+
30+
public class TestPageNavigate extends TestBase {
31+
@Test
32+
void shouldWork() {
33+
page.navigate(server.EMPTY_PAGE);
34+
assertEquals(server.EMPTY_PAGE, page.url());
35+
}
36+
37+
@Test
38+
void shouldWorkWithFileURL() {
39+
String fileUrl = Paths.get("src/test/resources/frames/two-frames.html").toUri().toString();
40+
page.navigate(fileUrl);
41+
assertEquals(fileUrl.toLowerCase(), page.url().toLowerCase());
42+
assertEquals(3, page.frames().size());
43+
}
44+
45+
@Test
46+
void shouldUseHttpForNoProtocol() {
47+
page.navigate(server.EMPTY_PAGE.substring("http://".length()));
48+
assertEquals(server.EMPTY_PAGE, page.url());
49+
}
50+
51+
@Test
52+
void shouldWorkCrossProcess() {
53+
page.navigate(server.EMPTY_PAGE);
54+
assertEquals(server.EMPTY_PAGE, page.url());
55+
56+
String url = server.CROSS_PROCESS_PREFIX + "/empty.html";
57+
Response response = page.navigate(url);
58+
assertEquals(url, page.url());
59+
assertEquals(page.mainFrame(), response.frame());
60+
assertEquals(page.mainFrame(), response.request().frame());
61+
assertEquals(url, response.url());
62+
}
63+
64+
@Test
65+
void shouldCaptureIframeNavigationRequest() {
66+
page.navigate(server.EMPTY_PAGE);
67+
assertEquals(server.EMPTY_PAGE, page.url());
68+
Request request = page.waitForRequest(server.PREFIX + "/frames/frame.html", () -> {
69+
Response response = page.navigate(server.PREFIX + "/frames/one-frame.html");
70+
assertEquals(server.PREFIX + "/frames/one-frame.html", page.url());
71+
assertEquals(page.mainFrame(), response.frame());
72+
assertEquals(server.PREFIX + "/frames/one-frame.html", response.url());
73+
74+
assertEquals(2, page.frames().size());
75+
});
76+
assertEquals(page.frames().get(1), request.frame());
77+
}
78+
79+
@Test
80+
void shouldWorkWithAnchorNavigation() {
81+
page.navigate(server.EMPTY_PAGE);
82+
assertEquals(server.EMPTY_PAGE, page.url());
83+
page.navigate(server.EMPTY_PAGE + "#foo");
84+
assertEquals(server.EMPTY_PAGE + "#foo", page.url());
85+
page.navigate(server.EMPTY_PAGE + "#bar");
86+
assertEquals(server.EMPTY_PAGE + "#bar", page.url());
87+
}
88+
89+
@Test
90+
void shouldWorkWithRedirects() {
91+
server.setRedirect("/redirect/1.html", "/redirect/2.html");
92+
server.setRedirect("/redirect/2.html", "/empty.html");
93+
Response response = page.navigate(server.PREFIX + "/redirect/1.html");
94+
assertEquals(200, response.status());
95+
assertEquals(server.EMPTY_PAGE, page.url());
96+
}
97+
98+
@Test
99+
void shouldNavigateToAboutBlank() {
100+
Response response = page.navigate("about:blank");
101+
assertNull(response);
102+
}
103+
104+
@Test
105+
void shouldReturnResponseWhenPageChangesItsURLAfterLoad() {
106+
Response response = page.navigate(server.PREFIX + "/historyapi.html");
107+
assertEquals(200, response.status());
108+
}
109+
110+
@Test
111+
void shouldWorkWithSubframesReturn204() {
112+
server.setRoute("/frames/frame.html", exchange -> {
113+
exchange.sendResponseHeaders(204, 0);
114+
exchange.getResponseBody().close();
115+
});
116+
page.navigate(server.PREFIX + "/frames/one-frame.html");
117+
}
118+
119+
@Test
120+
void shouldWorkWithSubframesReturn204WithDomcontentloaded() {
121+
server.setRoute("/frames/frame.html", exchange -> {
122+
exchange.sendResponseHeaders(204, 0);
123+
exchange.getResponseBody().close();
124+
});
125+
page.navigate(server.PREFIX + "/frames/one-frame.html", new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));
126+
}
127+
128+
@Test
129+
void shouldFailWhenServerReturns204() {
130+
// WebKit just loads an empty page.
131+
server.setRoute("/empty.html", exchange -> {
132+
exchange.sendResponseHeaders(204, 0);
133+
exchange.getResponseBody().close();
134+
});
135+
try {
136+
page.navigate(server.EMPTY_PAGE);
137+
fail("did not throw");
138+
} catch (PlaywrightException e) {
139+
if (isChromium())
140+
assertTrue(e.getMessage().contains("net::ERR_ABORTED"));
141+
else if (isWebKit())
142+
assertTrue(e.getMessage().contains("Aborted: 204 No Content"));
143+
else
144+
assertTrue(e.getMessage().contains("NS_BINDING_ABORTED"));
145+
}
146+
}
147+
148+
@Test
149+
void shouldNavigateToEmptyPageWithDomcontentloaded() {
150+
Response response = page.navigate(server.EMPTY_PAGE, new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));
151+
assertEquals(200, response.status());
152+
}
153+
154+
@Test
155+
void shouldWorkWhenPageCallsHistoryAPIInBeforeunload() {
156+
page.navigate(server.EMPTY_PAGE);
157+
page.evaluate("window.addEventListener('beforeunload', () => history.replaceState(null, 'initial', window.location.href), false);");
158+
Response response = page.navigate(server.PREFIX + "/grid.html");
159+
assertEquals(200, response.status());
160+
}
161+
162+
@Test
163+
void shouldCaptureCrossProcessIframeNavigationRequest() {
164+
page.navigate(server.EMPTY_PAGE);
165+
assertEquals(server.EMPTY_PAGE, page.url());
166+
167+
Request request = page.waitForRequest(server.CROSS_PROCESS_PREFIX + "/frames/frame.html", () -> {
168+
Response response = page.navigate(server.CROSS_PROCESS_PREFIX + "/frames/one-frame.html");
169+
assertEquals(server.CROSS_PROCESS_PREFIX + "/frames/one-frame.html", page.url());
170+
assertEquals(page.mainFrame(), response.frame());
171+
assertEquals(server.CROSS_PROCESS_PREFIX + "/frames/one-frame.html", response.url());
172+
173+
assertEquals(2, page.frames().size());
174+
});
175+
assertEquals(page.frames().get(1), request.frame());
176+
}
177+
178+
@Test
179+
void shouldSendReferer() throws ExecutionException, InterruptedException {
180+
Future<Server.Request> request1 = server.futureRequest("/grid.html");
181+
Future<Server.Request> request2 = server.futureRequest("/digits/1.png");
182+
183+
page.navigate(server.PREFIX + "/grid.html", new Page.NavigateOptions()
184+
.setReferer("http://google.com/"));
185+
assertEquals(asList("http://google.com/"), request1.get().headers.get("referer"));
186+
// Make sure subresources do not inherit referer.
187+
assertEquals(asList(server.PREFIX + "/grid.html"), request2.get().headers.get("referer"));
188+
assertEquals(server.PREFIX + "/grid.html", page.url());
189+
}
190+
}

0 commit comments

Comments
 (0)