From 8b8418b3c76a78fa85ce6c1d5860e35dbc120d51 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Thu, 18 Apr 2024 13:23:26 +0530 Subject: [PATCH] [cdp][java] Continue requests without modification for know errors in NetworkInterceptor Related to #13774 --- .../selenium/devtools/idealized/Network.java | 8 ++++++++ .../selenium/devtools/v121/v121Network.java | 8 ++++++-- .../selenium/devtools/v122/v122Network.java | 8 ++++++-- .../selenium/devtools/v123/v123Network.java | 8 ++++++-- .../openqa/selenium/devtools/v85/V85Network.java | 8 ++++++-- .../selenium/devtools/NetworkInterceptorTest.java | 15 ++++++++++++++- 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/java/src/org/openqa/selenium/devtools/idealized/Network.java b/java/src/org/openqa/selenium/devtools/idealized/Network.java index 0725b19b63e5f..a5848853db138 100644 --- a/java/src/org/openqa/selenium/devtools/idealized/Network.java +++ b/java/src/org/openqa/selenium/devtools/idealized/Network.java @@ -200,6 +200,12 @@ public void prepareToInterceptTraffic() { pausedRequest -> { try { String id = getRequestId(pausedRequest); + + if (hasErrorResponse(pausedRequest)) { + devTools.send(continueWithoutModification(pausedRequest)); + return; + } + Either message = createSeMessages(pausedRequest); if (message.isRight()) { @@ -348,6 +354,8 @@ protected abstract Command continueWithAuth( protected abstract Either createSeMessages(REQUESTPAUSED pausedReq); + protected abstract boolean hasErrorResponse(REQUESTPAUSED pausedReq); + protected abstract Command continueWithoutModification(REQUESTPAUSED pausedReq); protected abstract Command continueRequest(REQUESTPAUSED pausedReq, HttpRequest req); diff --git a/java/src/org/openqa/selenium/devtools/v121/v121Network.java b/java/src/org/openqa/selenium/devtools/v121/v121Network.java index 0addc563c8120..d098d42930611 100644 --- a/java/src/org/openqa/selenium/devtools/v121/v121Network.java +++ b/java/src/org/openqa/selenium/devtools/v121/v121Network.java @@ -114,8 +114,7 @@ public Event requestPausedEvent() { @Override public Either createSeMessages(RequestPaused pausedReq) { - if (pausedReq.getResponseStatusCode().isPresent() - || pausedReq.getResponseErrorReason().isPresent()) { + if (pausedReq.getResponseStatusCode().isPresent()) { String body; boolean bodyIsBase64Encoded; @@ -161,6 +160,11 @@ public Either createSeMessages(RequestPaused pausedRe return Either.left(req); } + @Override + protected boolean hasErrorResponse(RequestPaused pausedReq) { + return pausedReq.getResponseErrorReason().isPresent(); + } + @Override protected String getRequestId(RequestPaused pausedReq) { return pausedReq.getRequestId().toString(); diff --git a/java/src/org/openqa/selenium/devtools/v122/v122Network.java b/java/src/org/openqa/selenium/devtools/v122/v122Network.java index 6d5b128d9ac3c..ea368fd7dab0b 100644 --- a/java/src/org/openqa/selenium/devtools/v122/v122Network.java +++ b/java/src/org/openqa/selenium/devtools/v122/v122Network.java @@ -114,8 +114,7 @@ public Event requestPausedEvent() { @Override public Either createSeMessages(RequestPaused pausedReq) { - if (pausedReq.getResponseStatusCode().isPresent() - || pausedReq.getResponseErrorReason().isPresent()) { + if (pausedReq.getResponseStatusCode().isPresent()) { String body; boolean bodyIsBase64Encoded; @@ -161,6 +160,11 @@ public Either createSeMessages(RequestPaused pausedRe return Either.left(req); } + @Override + protected boolean hasErrorResponse(RequestPaused pausedReq) { + return pausedReq.getResponseErrorReason().isPresent(); + } + @Override protected String getRequestId(RequestPaused pausedReq) { return pausedReq.getRequestId().toString(); diff --git a/java/src/org/openqa/selenium/devtools/v123/v123Network.java b/java/src/org/openqa/selenium/devtools/v123/v123Network.java index c0686a3c98fab..df8438cbbb7dc 100644 --- a/java/src/org/openqa/selenium/devtools/v123/v123Network.java +++ b/java/src/org/openqa/selenium/devtools/v123/v123Network.java @@ -114,8 +114,7 @@ public Event requestPausedEvent() { @Override public Either createSeMessages(RequestPaused pausedReq) { - if (pausedReq.getResponseStatusCode().isPresent() - || pausedReq.getResponseErrorReason().isPresent()) { + if (pausedReq.getResponseStatusCode().isPresent()) { String body; boolean bodyIsBase64Encoded; @@ -161,6 +160,11 @@ public Either createSeMessages(RequestPaused pausedRe return Either.left(req); } + @Override + protected boolean hasErrorResponse(RequestPaused pausedReq) { + return pausedReq.getResponseErrorReason().isPresent(); + } + @Override protected String getRequestId(RequestPaused pausedReq) { return pausedReq.getRequestId().toString(); diff --git a/java/src/org/openqa/selenium/devtools/v85/V85Network.java b/java/src/org/openqa/selenium/devtools/v85/V85Network.java index 1c484924433fb..da12dbe42802d 100644 --- a/java/src/org/openqa/selenium/devtools/v85/V85Network.java +++ b/java/src/org/openqa/selenium/devtools/v85/V85Network.java @@ -124,8 +124,7 @@ public Event requestPausedEvent() { @Override public Either createSeMessages(RequestPaused pausedReq) { - if (pausedReq.getResponseStatusCode().isPresent() - || pausedReq.getResponseErrorReason().isPresent()) { + if (pausedReq.getResponseStatusCode().isPresent()) { String body; boolean bodyIsBase64Encoded; @@ -171,6 +170,11 @@ public Either createSeMessages(RequestPaused pausedRe return Either.left(req); } + @Override + protected boolean hasErrorResponse(RequestPaused pausedReq) { + return pausedReq.getResponseErrorReason().isPresent(); + } + @Override protected String getRequestId(RequestPaused pausedReq) { return pausedReq.getRequestId().toString(); diff --git a/java/test/org/openqa/selenium/devtools/NetworkInterceptorTest.java b/java/test/org/openqa/selenium/devtools/NetworkInterceptorTest.java index d053152688698..f916a1772c115 100644 --- a/java/test/org/openqa/selenium/devtools/NetworkInterceptorTest.java +++ b/java/test/org/openqa/selenium/devtools/NetworkInterceptorTest.java @@ -20,7 +20,8 @@ import static com.google.common.net.MediaType.XHTML_UTF_8; import static java.net.HttpURLConnection.HTTP_MOVED_TEMP; import static java.net.HttpURLConnection.HTTP_NOT_FOUND; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; import static org.openqa.selenium.remote.http.Contents.utf8String; import static org.openqa.selenium.testing.Safely.safelyCall; @@ -35,7 +36,9 @@ import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebDriverException; import org.openqa.selenium.environment.webserver.NettyAppServer; +import org.openqa.selenium.net.PortProber; import org.openqa.selenium.remote.http.Contents; import org.openqa.selenium.remote.http.Filter; import org.openqa.selenium.remote.http.HttpMethod; @@ -248,4 +251,14 @@ void shouldHandleRedirects() { assertThat(body).contains("Hello, World!"); } } + + @Test + @NoDriverBeforeTest + void shouldProceedAsNormalIfRequestResultInAnKnownError() { + Filter filter = next -> next; + try (NetworkInterceptor ignored = new NetworkInterceptor(driver, filter)) { + assertThatExceptionOfType(WebDriverException.class) + .isThrownBy(() -> driver.get("http://localhost:" + PortProber.findFreePort())); + } + } }