From 61e1545f64047748ba895293a260568b3ceeac25 Mon Sep 17 00:00:00 2001 From: Ricardo Martin Date: Fri, 9 May 2025 09:12:10 +0200 Subject: [PATCH] Refresh back button for chrome 136 Closes #39540 Signed-off-by: rmartinc (cherry picked from commit 048bc8851440efe6144e72b67a3c10a80b5d991d) --- .github/actions/install-chrome/action.yml | 4 ++-- .../org/keycloak/testsuite/util/UIUtils.java | 19 +++++++++++++++++++ .../testsuite/forms/BrowserButtonsTest.java | 16 ++++++---------- .../testsuite/forms/RegisterTest.java | 4 ++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/.github/actions/install-chrome/action.yml b/.github/actions/install-chrome/action.yml index 41e64a2d4e15..c880cddf9345 100644 --- a/.github/actions/install-chrome/action.yml +++ b/.github/actions/install-chrome/action.yml @@ -5,7 +5,7 @@ inputs: version: description: The version of Chrome and Chromedriver to install. By default none is installed. required: false - default: "135.0.7049.114" # E.g. 135.0.7049.84 (fixed version), default (chrome provided by GHA box) + default: default # E.g. 135.0.7049.84 (fixed version), default (chrome provided by GHA box) runs: using: composite @@ -36,4 +36,4 @@ runs: shell: bash run: | google-chrome --version - $CHROMEWEBDRIVER/chromedriver --version \ No newline at end of file + $CHROMEWEBDRIVER/chromedriver --version diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java index 7b428e60e23e..cec9d9f4bde4 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java @@ -3,6 +3,7 @@ import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.keycloak.testsuite.page.AbstractPatternFlyAlert; +import org.keycloak.testsuite.pages.AbstractPage; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.Keys; @@ -311,4 +312,22 @@ public static String getRawPageSource(WebDriver driver) { public static String getRawPageSource() { return getRawPageSource(getCurrentDriver()); } + + /** + * Navigates the driver back but it refreshes the page if it is not the expected one for + * chrome. Chrome 136 does not respect cache-control and refresh is needed + * to reach the server again (the page is cached no matter the cache-control + * directive returned). + * See https://issues.chromium.org/issues/415773538 + * + * @param driver The driver used + * @param expectedPage The expected page + */ + public static void navigateBackWithRefresh(WebDriver driver, AbstractPage expectedPage) { + driver.navigate().back(); + if (!expectedPage.isCurrent() && BrowserDriverUtil.isDriverChrome(driver)) { + driver.navigate().refresh(); + } + expectedPage.assertCurrent(); + } } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/BrowserButtonsTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/BrowserButtonsTest.java index 23bdebb93b40..c80a4c1b35f3 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/BrowserButtonsTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/BrowserButtonsTest.java @@ -44,6 +44,7 @@ import org.keycloak.testsuite.pages.VerifyEmailPage; import org.keycloak.testsuite.util.GreenMailRule; import org.keycloak.testsuite.util.MailUtils; +import org.keycloak.testsuite.util.UIUtils; import org.keycloak.testsuite.util.UserBuilder; /** @@ -150,8 +151,7 @@ public void requiredActionsBackForwardTest() throws IOException, MessagingExcept updateProfilePage.assertCurrent(); // Click browser back. Assert on "Page expired" page - driver.navigate().back(); - loginExpiredPage.assertCurrent(); + UIUtils.navigateBackWithRefresh(driver, loginExpiredPage); // Click browser forward. Assert on "updateProfile" page again driver.navigate().forward(); @@ -182,8 +182,7 @@ public void requiredActionsBackAndRefreshTest() throws IOException, MessagingExc updateProfilePage.assertCurrent(); // Click browser back. Assert on "Page expired" page - driver.navigate().back(); - loginExpiredPage.assertCurrent(); + UIUtils.navigateBackWithRefresh(driver, loginExpiredPage); // Click browser refresh. Assert still on "Page expired" page driver.navigate().refresh(); @@ -198,8 +197,7 @@ public void requiredActionsBackAndRefreshTest() throws IOException, MessagingExc updateProfilePage.assertCurrent(); // Click browser back. Assert on "Page expired" page - driver.navigate().back(); - loginExpiredPage.assertCurrent(); + UIUtils.navigateBackWithRefresh(driver, loginExpiredPage); // Click "login continue" and assert on updateProfile page loginExpiredPage.clickLoginContinueLink(); @@ -226,8 +224,7 @@ public void consentRefresh() { grantPage.assertCurrent(); // Click browser back. Assert on "page expired" - driver.navigate().back(); - loginExpiredPage.assertCurrent(); + UIUtils.navigateBackWithRefresh(driver, loginExpiredPage); // Click continue login. Assert on consent screen again loginExpiredPage.clickLoginContinueLink(); @@ -363,8 +360,7 @@ public void appInitiatedRegistrationWithBackButton() throws Exception { updatePasswordPage.assertCurrent(); // Click browser back. Should be on 'page expired' - driver.navigate().back(); - loginExpiredPage.assertCurrent(); + UIUtils.navigateBackWithRefresh(driver, loginExpiredPage); // Click 'continue' should be on updatePasswordPage loginExpiredPage.clickLoginContinueLink(); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java index fefb11db0757..01616c196deb 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java @@ -56,6 +56,7 @@ import org.keycloak.testsuite.util.oauth.AccessTokenResponse; import org.keycloak.testsuite.util.UserBuilder; import org.keycloak.testsuite.util.AccountHelper; +import org.keycloak.testsuite.util.UIUtils; import jakarta.mail.internet.MimeMessage; import jakarta.ws.rs.core.Response; @@ -904,9 +905,8 @@ public void testRegisterShouldFailBeforeUserCreationWhenUserIsInContext() { driver.navigate().back(); driver.navigate().back(); events.clear(); - driver.navigate().back(); - errorPage.assertCurrent(); + UIUtils.navigateBackWithRefresh(driver, errorPage); Assert.assertEquals("Action expired. Please continue with login now.", errorPage.getError()); events.expectRegister("registerUserMissingTermsAcceptance", "registerUserMissingTermsAcceptance@email")