package org.keycloak.testsuite.console.page.authentication; import org.keycloak.testsuite.page.Form; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.ui.Select; import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad; import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement; /** * @author Petr Mensik * @author tkyjovsk * @author mhajas * @author Vaclav Muzikar <vmuzikar@redhat.com> */ public class PasswordPolicy extends Authentication { @Override public String getUriFragment() { return super.getUriFragment() + "/password-policy"; } @FindBy(tagName = "select") private Select addPolicySelect; @FindBy(tagName = "select") private WebElement addPolicySelectElement; @FindBy(tagName = "table") private WebElement table; public void addPolicy(Type policy, String value) { waitUntilElement(addPolicySelectElement).is().present(); addPolicySelect.selectByVisibleText(policy.getName()); if (value != null) {setPolicyValue(policy, value);} primaryButton.click(); waitForPageToLoad(driver); } public void addPolicy(Type policy, int value) { addPolicy(policy, String.valueOf(value)); } public void addPolicy(Type policy) { addPolicy(policy, null); } public void removePolicy(Type policy) { getPolicyRow(policy).findElement(By.cssSelector("td.kc-action-cell")).click(); if (primaryButton.isEnabled()) { primaryButton.click(); } waitForPageToLoad(driver); } public void editPolicy(Type policy, int value) { editPolicy(policy, String.valueOf(value)); } public void editPolicy(Type policy, String value) { setPolicyValue(policy, value); if (primaryButton.isEnabled()) { primaryButton.click(); } waitForPageToLoad(driver); } private void setPolicyValue(Type policy, String value) { WebElement input = getPolicyRow(policy).findElement(By.tagName("input")); Form.setInputValue(input, value); } private WebElement getPolicyRow(Type policy) { return table.findElement(By.xpath("//tr[td[text()='" + policy.getName() + "']]")); } public enum Type { HASH_ITERATIONS("Hashing Iterations"), LENGTH("Minimum Length"), DIGITS("Digits"), LOWER_CASE("Lowercase Characters"), UPPER_CASE("Uppercase Characters"), SPECIAL_CHARS("Special Characters"), NOT_USERNAME("Not Username"), REGEX_PATTERN("Regular Expression"), PASSWORD_HISTORY("Not Recently Used"), FORCE_EXPIRED_PASSWORD_CHANGE("Expire Password"), HASH_ALGORITHM("Hashing Algorithm"); private String name; private Type(String name) { this.name = name; } public String getName() { return name; } } }