From 4e273a25b82476435409641a40f64dc8a145293c Mon Sep 17 00:00:00 2001 From: Jakob Linskeseder Date: Tue, 30 May 2023 16:05:51 +0200 Subject: [PATCH] Improve a11y by providing the current language --- .../java/org/keycloak/testsuite/pages/LoginPage.java | 11 ++++++++--- .../org/keycloak/testsuite/i18n/LoginPageTest.java | 10 ++++++++++ .../main/resources/theme/base/account/template.ftl | 2 +- .../src/main/resources/theme/base/login/template.ftl | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPage.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPage.java index b07487f51379..d5e317e82c3b 100755 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPage.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPage.java @@ -38,6 +38,9 @@ public class LoginPage extends LanguageComboboxAwarePage { @ArquillianResource protected OAuthClient oauth; + @FindBy(xpath = "//html") + protected WebElement htmlRoot; + @FindBy(id = "username") protected WebElement usernameInput; @@ -68,7 +71,6 @@ public class LoginPage extends LanguageComboboxAwarePage { @FindBy(className = "alert-success") private WebElement loginSuccessMessage; - @FindBy(className = "alert-info") private WebElement loginInfoMessage; @@ -109,12 +111,15 @@ public void missingPassword(String username) { usernameInput.sendKeys(username); passwordInput.clear(); clickLink(submitButton); - } + public void missingUsername() { clearUsernameInputAndWaitIfNecessary(); clickLink(submitButton); + } + public String getHtmlLanguage() { + return htmlRoot.getAttribute("lang"); } public String getUsername() { @@ -168,6 +173,7 @@ public String getInstruction() { public String getSuccessMessage() { return loginSuccessMessage != null ? loginSuccessMessage.getText() : null; } + public String getInfoMessage() { try { return getTextFromElement(loginInfoMessage); @@ -176,7 +182,6 @@ public String getInfoMessage() { } } - public boolean isCurrent() { String realm = "test"; return isCurrent(realm); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/i18n/LoginPageTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/i18n/LoginPageTest.java index f50780cfda97..ef8a5c2ac35f 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/i18n/LoginPageTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/i18n/LoginPageTest.java @@ -120,6 +120,16 @@ public void uiLocalesParameter() { assertEquals("Deutsch", loginPage.getLanguageDropdownText()); } + @Test + public void htmlLangAttribute() { + loginPage.open(); + assertEquals("en", loginPage.getHtmlLanguage()); + + oauth.uiLocales("de"); + loginPage.open(); + assertEquals("de", loginPage.getHtmlLanguage()); + } + @Test public void acceptLanguageHeader() throws IOException { try(CloseableHttpClient httpClient = (CloseableHttpClient) new HttpClientBuilder().build()) { diff --git a/themes/src/main/resources/theme/base/account/template.ftl b/themes/src/main/resources/theme/base/account/template.ftl index ec44204ee880..da2ec134d0d4 100644 --- a/themes/src/main/resources/theme/base/account/template.ftl +++ b/themes/src/main/resources/theme/base/account/template.ftl @@ -1,6 +1,6 @@ <#macro mainLayout active bodyClass> - + lang="${locale.currentLanguageTag}"> diff --git a/themes/src/main/resources/theme/base/login/template.ftl b/themes/src/main/resources/theme/base/login/template.ftl index 9e6fc6fde69f..f4382cfccee4 100644 --- a/themes/src/main/resources/theme/base/login/template.ftl +++ b/themes/src/main/resources/theme/base/login/template.ftl @@ -1,6 +1,6 @@ <#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true displayRequiredFields=false> - + lang="${locale.currentLanguageTag}">