1
0
mirror of synced 2026-08-05 06:56:56 +00:00

test: referer option and more navigation tests (#545)

This commit is contained in:
Yury Semikhatsky
2021-08-10 23:07:05 -07:00
committed by GitHub
parent 1eb3f3bb80
commit ab2efd4d80
@@ -0,0 +1,190 @@
/*
* Copyright (c) Microsoft Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.microsoft.playwright;
import com.microsoft.playwright.options.WaitUntilState;
import org.junit.jupiter.api.Test;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import static java.util.Arrays.asList;
import static org.junit.jupiter.api.Assertions.*;
public class TestPageNavigate extends TestBase {
@Test
void shouldWork() {
page.navigate(server.EMPTY_PAGE);
assertEquals(server.EMPTY_PAGE, page.url());
}
@Test
void shouldWorkWithFileURL() {
String fileUrl = Paths.get("src/test/resources/frames/two-frames.html").toUri().toString();
page.navigate(fileUrl);
assertEquals(fileUrl.toLowerCase(), page.url().toLowerCase());
assertEquals(3, page.frames().size());
}
@Test
void shouldUseHttpForNoProtocol() {
page.navigate(server.EMPTY_PAGE.substring("http://".length()));
assertEquals(server.EMPTY_PAGE, page.url());
}
@Test
void shouldWorkCrossProcess() {
page.navigate(server.EMPTY_PAGE);
assertEquals(server.EMPTY_PAGE, page.url());
String url = server.CROSS_PROCESS_PREFIX + "/empty.html";
Response response = page.navigate(url);
assertEquals(url, page.url());
assertEquals(page.mainFrame(), response.frame());
assertEquals(page.mainFrame(), response.request().frame());
assertEquals(url, response.url());
}
@Test
void shouldCaptureIframeNavigationRequest() {
page.navigate(server.EMPTY_PAGE);
assertEquals(server.EMPTY_PAGE, page.url());
Request request = page.waitForRequest(server.PREFIX + "/frames/frame.html", () -> {
Response response = page.navigate(server.PREFIX + "/frames/one-frame.html");
assertEquals(server.PREFIX + "/frames/one-frame.html", page.url());
assertEquals(page.mainFrame(), response.frame());
assertEquals(server.PREFIX + "/frames/one-frame.html", response.url());
assertEquals(2, page.frames().size());
});
assertEquals(page.frames().get(1), request.frame());
}
@Test
void shouldWorkWithAnchorNavigation() {
page.navigate(server.EMPTY_PAGE);
assertEquals(server.EMPTY_PAGE, page.url());
page.navigate(server.EMPTY_PAGE + "#foo");
assertEquals(server.EMPTY_PAGE + "#foo", page.url());
page.navigate(server.EMPTY_PAGE + "#bar");
assertEquals(server.EMPTY_PAGE + "#bar", page.url());
}
@Test
void shouldWorkWithRedirects() {
server.setRedirect("/redirect/1.html", "/redirect/2.html");
server.setRedirect("/redirect/2.html", "/empty.html");
Response response = page.navigate(server.PREFIX + "/redirect/1.html");
assertEquals(200, response.status());
assertEquals(server.EMPTY_PAGE, page.url());
}
@Test
void shouldNavigateToAboutBlank() {
Response response = page.navigate("about:blank");
assertNull(response);
}
@Test
void shouldReturnResponseWhenPageChangesItsURLAfterLoad() {
Response response = page.navigate(server.PREFIX + "/historyapi.html");
assertEquals(200, response.status());
}
@Test
void shouldWorkWithSubframesReturn204() {
server.setRoute("/frames/frame.html", exchange -> {
exchange.sendResponseHeaders(204, 0);
exchange.getResponseBody().close();
});
page.navigate(server.PREFIX + "/frames/one-frame.html");
}
@Test
void shouldWorkWithSubframesReturn204WithDomcontentloaded() {
server.setRoute("/frames/frame.html", exchange -> {
exchange.sendResponseHeaders(204, 0);
exchange.getResponseBody().close();
});
page.navigate(server.PREFIX + "/frames/one-frame.html", new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));
}
@Test
void shouldFailWhenServerReturns204() {
// WebKit just loads an empty page.
server.setRoute("/empty.html", exchange -> {
exchange.sendResponseHeaders(204, 0);
exchange.getResponseBody().close();
});
try {
page.navigate(server.EMPTY_PAGE);
fail("did not throw");
} catch (PlaywrightException e) {
if (isChromium())
assertTrue(e.getMessage().contains("net::ERR_ABORTED"));
else if (isWebKit())
assertTrue(e.getMessage().contains("Aborted: 204 No Content"));
else
assertTrue(e.getMessage().contains("NS_BINDING_ABORTED"));
}
}
@Test
void shouldNavigateToEmptyPageWithDomcontentloaded() {
Response response = page.navigate(server.EMPTY_PAGE, new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));
assertEquals(200, response.status());
}
@Test
void shouldWorkWhenPageCallsHistoryAPIInBeforeunload() {
page.navigate(server.EMPTY_PAGE);
page.evaluate("window.addEventListener('beforeunload', () => history.replaceState(null, 'initial', window.location.href), false);");
Response response = page.navigate(server.PREFIX + "/grid.html");
assertEquals(200, response.status());
}
@Test
void shouldCaptureCrossProcessIframeNavigationRequest() {
page.navigate(server.EMPTY_PAGE);
assertEquals(server.EMPTY_PAGE, page.url());
Request request = page.waitForRequest(server.CROSS_PROCESS_PREFIX + "/frames/frame.html", () -> {
Response response = page.navigate(server.CROSS_PROCESS_PREFIX + "/frames/one-frame.html");
assertEquals(server.CROSS_PROCESS_PREFIX + "/frames/one-frame.html", page.url());
assertEquals(page.mainFrame(), response.frame());
assertEquals(server.CROSS_PROCESS_PREFIX + "/frames/one-frame.html", response.url());
assertEquals(2, page.frames().size());
});
assertEquals(page.frames().get(1), request.frame());
}
@Test
void shouldSendReferer() throws ExecutionException, InterruptedException {
Future<Server.Request> request1 = server.futureRequest("/grid.html");
Future<Server.Request> request2 = server.futureRequest("/digits/1.png");
page.navigate(server.PREFIX + "/grid.html", new Page.NavigateOptions()
.setReferer("http://google.com/"));
assertEquals(asList("http://google.com/"), request1.get().headers.get("referer"));
// Make sure subresources do not inherit referer.
assertEquals(asList(server.PREFIX + "/grid.html"), request2.get().headers.get("referer"));
assertEquals(server.PREFIX + "/grid.html", page.url());
}
}