Refactoring

This commit is contained in:
mhajas 2015-09-25 09:10:17 +02:00
parent 8ef6602f82
commit 8f1daf5d77
16 changed files with 387 additions and 378 deletions

View file

@ -7,7 +7,7 @@ import org.openqa.selenium.support.ui.Select;
/**
* Created by mhajas on 8/21/15.
*/
public class Bindings extends Authentication{
public class Bindings extends Authentication {
@Override
public String getUriFragment() {
@ -17,48 +17,48 @@ public class Bindings extends Authentication{
@FindBy(id = "browser")
private Select BrowserFlowSelect;
@FindBy(id = "registration")
private Select RegistrationFlowSelect;
@FindBy(id = "grant")
private Select DirectGrantFlowSelect;
@FindBy(id = "resetCredentials")
private Select ResetCredentialsSelect;
@FindBy(id = "clientAuthentication")
private Select ClientAuthenticationSelect;
@FindBy(xpath = "//button[text()='Save']")
private WebElement saveButton;
@FindBy(xpath = "//button[text()='Cancel']")
private WebElement cancelButton;
public void changeBrowserFlowSelect(BrowserFlowSelectValues value) {
BrowserFlowSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "registration")
private Select RegistrationFlowSelect;
public void changeRegistrationFlowSelect(RegistrationFlowSelectValues value) {
RegistrationFlowSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "grant")
private Select DirectGrantFlowSelect;
public void changeDirectGrantFlowSelect(DirectGrantFlowSelectValues value) {
DirectGrantFlowSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "resetCredentials")
private Select ResetCredentialsSelect;
public void changeResetCredentialsSelect(ResetCredentialsSelectValues value) {
ResetCredentialsSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "clientAuthentication")
private Select ClientAuthenticationSelect;
public void changeClientAuthenticationSelect(ClientAuthenticationSelectValues value) {
ClientAuthenticationSelect.selectByVisibleText(value.getName());
}
@FindBy(xpath = "//button[text()='Save']")
private WebElement saveButton;
public void clickSave() {
saveButton.click();
}
@FindBy(xpath = "//button[text()='Cancel']")
private WebElement cancelButton;
public void clickCancel() {
cancelButton.click();
}
@ -143,5 +143,4 @@ public class Bindings extends Authentication{
}
}

View file

@ -19,9 +19,14 @@ public class Flows extends Authentication {
@FindBy(tagName = "select")
private Select flowSelect;
public void changeFlowSelect(FlowSelectValues value) {
flowSelect.selectByVisibleText(value.getName());
}
@FindBy(linkText = "New")
private WebElement newButton;
@FindBy(linkText = "Copy")
private WebElement copyButton;
@FindBy(tagName = "table")
private WebElement flowsTable;
public enum FlowSelectValues {
@ -37,13 +42,12 @@ public class Flows extends Authentication {
public String getName() {
return name;
}
}
@FindBy(linkText = "New")
private WebElement newButton;
@FindBy(linkText = "Copy")
private WebElement copyButton;
public void changeFlowSelect(FlowSelectValues value) {
flowSelect.selectByVisibleText(value.getName());
}
public void clickNew() {
newButton.click();
@ -53,160 +57,156 @@ public class Flows extends Authentication {
copyButton.click();
}
private void clickRadioButton(String row, int column) {
flowsTable.findElement(By.xpath("//td[text()[contains(.,'" + row + "')]]/../td[" + String.valueOf(column) + "]//input[@type='radio']")).click();
}
// Direct grant
public void setPasswordRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Password')]]/../td[2]//input[@type='radio']")).click();
clickRadioButton("Password", 2);
}
public void setPasswordDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Password')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Password", 3);
}
public void setOTPRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'O T P')]]/../td[2]//input[@type='radio']")).click();
clickRadioButton("O T P", 2);
}
public void setOTPOptional() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'O T P')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("O T P", 3);
}
public void setOTPDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'O T P')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("O T P", 4);
}
// Registration
public void setRegistrationFormRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Registration form')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Registration form", 3);
}
public void setRegistrationFormDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Registration form')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Registration form", 4);
}
public void setRegistrationUserCreationRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Registration User Creation')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Registration User Creation", 3);
}
public void setRegistrationUserCreationDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Registration User Creation')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Registration User Creation", 4);
}
public void setProfileValidationRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Profile Validation')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Profile Validation", 3);
}
public void setProfileValidationDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Profile Validation')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Profile Validation", 4);
}
public void setPasswordValidationRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Password Validation')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Password Validation", 3);
}
public void setPasswordValidationDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Password Validation')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Password Validation", 4);
}
public void setRecaptchaRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Recaptcha')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Recaptcha", 3);
}
public void setRecaptchaDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Recaptcha')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Recaptcha", 4);
}
// Browser
public void setCookieAlternative() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Cookie')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Cookie", 3);
}
public void setCookieDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Cookie')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Cookie", 4);
}
public void setKerberosAlternative() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Kerberos')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Kerberos", 3);
}
public void setKerberosRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Kerberos')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Kerberos", 4);
}
public void setKerberosDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Kerberos')]]/../td[5]//input[@type='radio']")).click();
clickRadioButton("Kerberos", 5);
}
public void setFormsAlternative() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Forms')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Forms", 3);
}
public void setFormsRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Forms')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Forms", 4);
}
public void setFormsDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Forms')]]/../td[5]//input[@type='radio']")).click();
clickRadioButton("Forms", 5);
}
public void setOTPFormRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,' O T P Form')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton(" O T P Form", 3);
}
public void setOTPFormOptional() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,' O T P Form')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton(" O T P Form", 4);
}
public void setOTPFormDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,' O T P Form')]]/../td[5]//input[@type='radio']")).click();
clickRadioButton(" O T P Form", 5);
}
// Reset credentials
public void setResetPasswordRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Reset Password')]]/../td[2]//input[@type='radio']")).click();
clickRadioButton("Reset Password", 2);
}
public void setResetPasswordOptional() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Reset Password')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Reset Password", 3);
}
public void setResetPasswordDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Reset Password')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Reset Password", 4);
}
public void setResetOTPRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Reset O T P')]]/../td[2]//input[@type='radio']")).click();
clickRadioButton("Reset O T P", 2);
}
public void setResetOTPOptional() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Reset O T P')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Reset O T P", 3);
}
public void setResetOTPDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Reset O T P')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton("Reset O T P", 4);
}
// Clients
public void setClientIdAndSecretRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Client Id and Secret')]]/../td[2]//input[@type='radio']")).click();
}
public void setClientIdAndSecretAlternative() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Client Id and Secret')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton("Client Id and Secret", 2);
}
public void setClientIdAndSecretDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,'Client Id and Secret')]]/../td[4]//input[@type='radio']")).click();
}
public void setSignedJwtRequired() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,' Signed Jwt')]]/../td[2]//input[@type='radio']")).click();
clickRadioButton("Client Id and Secret", 3);
}
public void setSignedJwtAlternative() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,' Signed Jwt')]]/../td[3]//input[@type='radio']")).click();
clickRadioButton(" Signed Jwt", 2);
}
public void setSignedJwtDisabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()[contains(.,' Signed Jwt')]]/../td[4]//input[@type='radio']")).click();
clickRadioButton(" Signed Jwt", 3);
}
}

View file

@ -19,20 +19,20 @@ public class OTPPolicy extends Authentication {
@FindBy(linkText = "Cancel")
private WebElement cancelButton;
@FindBy(id = "lookAhead")
private WebElement lookAheadInput;
@FindBy(id = "counter")
private WebElement initialCounterInput;
public void clickCancel() {
cancelButton.click();
}
@FindBy(id = "lookAhead")
private WebElement lookAheadInput;
public void setLookAheadInputValue(String value) {
Form.setInputValue(lookAheadInput, value);
}
@FindBy(id = "counter")
private WebElement initialCounterInput;
public void setInitialcounterInputValue(String value) {
Form.setInputValue(initialCounterInput, value);
}

View file

@ -1,14 +1,15 @@
package org.keycloak.testsuite.console.page.authentication;
import java.util.List;
import org.jboss.arquillian.graphene.findby.ByJQuery;
import static org.keycloak.testsuite.util.WaitUtils.waitGuiForElement;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
import java.util.List;
import static org.keycloak.testsuite.util.WaitUtils.waitGuiForElement;
/**
* @author Petr Mensik
* @author tkyjovsk
@ -23,7 +24,7 @@ public class PasswordPolicy extends Authentication {
@FindBy(tagName = "select")
private Select addPolicySelect;
@FindBy(tagName = "select")
private WebElement addPolicySelectElement;

View file

@ -1,6 +1,8 @@
package org.keycloak.testsuite.console.page.authentication;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/**
* @author tkyjovsk
@ -8,48 +10,62 @@ import org.openqa.selenium.By;
*/
public class RequiredActions extends Authentication {
public final static String ENABLED = "enabled";
public final static String DEFAULT_ACTION = "defaultAction";
@FindBy(tagName = "table")
private WebElement requiredActionTable;
@Override
public String getUriFragment() {
return super.getUriFragment() + "/required-actions";
}
public void clickTermsAndConditionEnabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Terms and Conditions']/..//input[@type='checkbox' and @ng-model='requiredAction.enabled']")).click();
private void setRequiredActionValue(String row, String column, boolean value) {
WebElement checkbox = requiredActionTable.findElement(By.xpath("//td[text()='" + row + "']/..//input[@ng-model='requiredAction." + column + "']"));
if (checkbox.isSelected() != value) {
checkbox.click();
}
}
public void clickTermsAndConditionDefaultAction() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Terms and Conditions']/..//input[@type='checkbox' and @ng-model='requiredAction.defaultAction']")).click();
public void setTermsAndConditionEnabled(boolean value) {
setRequiredActionValue("Terms and Conditions", ENABLED, value);
}
public void clickVerifyEmailEnabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Verify Email']/..//input[@type='checkbox' and @ng-model='requiredAction.enabled']")).click();
public void setTermsAndConditionDefaultAction(boolean value) {
setRequiredActionValue("Terms and Conditions", DEFAULT_ACTION, value);
}
public void clickVerifyEmailDefaultAction() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Verify Email']/..//input[@type='checkbox' and @ng-model='requiredAction.defaultAction']")).click();
public void setVerifyEmailEnabled(boolean value) {
setRequiredActionValue("Verify Email", ENABLED, value);
}
public void clickUpdatePasswordEnabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Update Password']/..//input[@type='checkbox' and @ng-model='requiredAction.enabled']")).click();
public void setVerifyEmailDefaultAction(boolean value) {
setRequiredActionValue("Verify Email", DEFAULT_ACTION, value);
}
public void clickUpdatePasswordDefaultAction() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Update Password']/..//input[@type='checkbox' and @ng-model='requiredAction.defaultAction']")).click();
public void setUpdatePasswordEnabled(boolean value) {
setRequiredActionValue("Update Password", ENABLED, value);
}
public void clickConfigureTotpEnabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Configure Totp']/..//input[@type='checkbox' and @ng-model='requiredAction.enabled']")).click();
public void setUpdatePasswordDefaultAction(boolean value) {
setRequiredActionValue("Update Password", DEFAULT_ACTION, value);
}
public void clickConfigureTotpDefaultAction() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Configure Totp']/..//input[@type='checkbox' and @ng-model='requiredAction.defaultAction']")).click();
public void setConfigureTotpEnabled(boolean value) {
setRequiredActionValue("Configure Totp", ENABLED, value);
}
public void clickUpdateProfileEnabled() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Update Profile']/..//input[@type='checkbox' and @ng-model='requiredAction.enabled']")).click();
public void setConfigureTotpDefaultAction(boolean value) {
setRequiredActionValue("Configure Totp", DEFAULT_ACTION, value);
}
public void clickUpdateProfileDefaultAction() {
driver.findElement(By.xpath("//td[@class='ng-binding' and text()='Update Profile']/..//input[@type='checkbox' and @ng-model='requiredAction.defaultAction']")).click();
public void setUpdateProfileEnabled(boolean value) {
setRequiredActionValue("Update Profile", ENABLED, value);
}
public void setUpdateProfileDefaultAction(boolean value) {
setRequiredActionValue("Update Profile", DEFAULT_ACTION, value);
}
}

View file

@ -7,7 +7,6 @@ import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/**
*
* @author tkyjovsk
* @author mhajas
*/
@ -27,6 +26,12 @@ public class AdminEvents extends Events {
public class AdminEventsTable extends DataTable {
@FindBy(xpath = "//button[text()[contains(.,'Filter')]]")
private WebElement filterButton;
@FindBy(tagName = "form")
private AdminEventsTableFilterForm filterForm;
public void update() {
waitAjaxForBody();
clickHeaderButton("Update");
@ -37,63 +42,63 @@ public class AdminEvents extends Events {
clickHeaderButton("Reset");
}
@FindBy(xpath = "//button[text()[contains(.,'Filter')]]")
private WebElement filterButton;
public void filter() {
waitAjaxForBody();
filterButton.click();
}
@FindBy(tagName = "form")
private AdminEventsTableFilterForm filterForm;
public AdminEventsTableFilterForm filterForm() {
return filterForm;
}
public class AdminEventsTableFilterForm extends Form {
@FindBy(id = "resource")
private WebElement resourcePathInput;
@FindBy(id = "realm")
private WebElement realmInput;
@FindBy(id = "client")
private WebElement clientInput;
@FindBy(id = "user")
private WebElement userInput;
@FindBy(id = "ipAddress")
private WebElement ipAddressInput;
@FindBy(xpath = "//div[@id='s2id_adminEnabledEventOperations']/ul")
private WebElement operationTypesInput;
@FindBy(xpath = "//div[@id='select2-drop']")
private WebElement operationTypesValues;
public void addOperationType(String type) {
driver.findElement(By.xpath("//div[@id='s2id_adminEnabledEventOperations']/ul")).click();
driver.findElement(By.xpath("//div[@id='select2-drop']//div[text()[contains(.,'" + type + "')]]/..")).click();
operationTypesInput.click();
operationTypesValues.findElement(By.xpath("//div[text() = '" + type + "']")).click();
}
public void removeOperationType(String type) {
driver.findElement(By.xpath("//div[@id='s2id_adminEnabledEventOperations']//div[text()='" + type + "']/../a")).click();
operationTypesInput.findElement(By.xpath("//div[text()='" + type + "']/../a")).click();
}
@FindBy(id = "resource")
private WebElement resourcePathInput;
public void setResourcePathInput(String value) {
setInputValue(resourcePathInput, value);
}
@FindBy(id = "realm")
private WebElement realmInput;
public void setRealmInput(String value) {
setInputValue(realmInput, value);
}
@FindBy(id = "client")
private WebElement clientInput;
public void setClientInput(String value) {
setInputValue(clientInput, value);
}
@FindBy(id = "user")
private WebElement userInput;
public void setUserInput(String value) {
setInputValue(userInput, value);
}
@FindBy(id = "ipAddress")
private WebElement ipAddressInput;
public void setIpAddressInput(String value) {
setInputValue(ipAddressInput, value);
}

View file

@ -32,6 +32,33 @@ public class Config extends Events {
@FindBy(xpath = "//div[@id='s2id_autogen1']/..//select")
private Select eventListenersSelect;
@FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='enabled']]")
private OnOffSwitch SaveEvents;
@FindBy(xpath = "//div[@id='s2id_enabledEventTypes']//input")
private WebElement savedTypesInput;
@FindBy(xpath = "//div[@id='select2-drop']/ul")
private WebElement savedTypesOptions;
@FindBy(id = "expiration")
private WebElement expirationInput;
@FindBy(name = "expirationUnit")
private Select expirationUnitSelect;
@FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='adminEventsEnabled']]")
private OnOffSwitch saveAdminEvents;
@FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='adminEventsDetailsEnabled']]")
private OnOffSwitch includeRepresentation;
@FindBy(xpath = "//button[@data-ng-click='clearEvents()']")
private WebElement clearLoginEventsButton;
@FindBy(xpath = "//button[@data-ng-click='clearAdminEvents()']")
private WebElement clearAdminEventsButton;
public void addEventListener(String listener) {
eventListenersInput.click();
eventListenersSelect.selectByVisibleText(listener);
@ -41,19 +68,10 @@ public class Config extends Events {
eventListenersInput.findElement(By.xpath("//div[text()='" + listener + "']/../a")).click();
}
@FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='enabled']]")
private OnOffSwitch SaveEvents;
public void setSaveEvents(boolean value) {
SaveEvents.setOn(value);
}
@FindBy(xpath = "//div[@id='s2id_enabledEventTypes']//input")
private WebElement savedTypesInput;
@FindBy(xpath = "//div[@id='select2-drop']/ul")
private WebElement savedTypesOptions;
public void addSaveType(String type) {
savedTypesInput.click();
savedTypesOptions.findElement(By.xpath("//div[text()='" + type + "']")).click();
@ -64,36 +82,24 @@ public class Config extends Events {
}
public void clearLoginEvents() {
driver.findElement(By.xpath("//button[@data-ng-click='clearEvents()']")).click();
clearLoginEventsButton.click();
}
@FindBy(id = "expiration")
private WebElement expirationInput;
@FindBy(name = "expirationUnit")
private Select expirationUnitSelect;
public void setExpiration(String value, String unit) {
expirationUnitSelect.selectByVisibleText(unit);
Form.setInputValue(expirationInput, value);
}
@FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='adminEventsEnabled']]")
private OnOffSwitch saveAdminEvents;
public void setSaveAdminEvents(boolean value) {
saveAdminEvents.setOn(value);
}
@FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='adminEventsDetailsEnabled']]")
private OnOffSwitch includeRepresentation;
public void setIncludeRepresentation(boolean value) {
includeRepresentation.setOn(value);
}
public void clearAdminEvents() {
driver.findElement(By.xpath("//button[@data-ng-click='clearAdminEvents()']")).click();
clearAdminEventsButton.click();
}
}
}

View file

@ -26,6 +26,12 @@ public class LoginEvents extends Events {
public class LoginEventsTable extends DataTable {
@FindBy(xpath = "//button[text()[contains(.,'Filter')]]")
private WebElement filterButton;
@FindBy(tagName = "form")
private LoginEventsTableFilterForm filterForm;
public void update() {
waitAjaxForBody();
clickHeaderButton("Update");
@ -36,42 +42,42 @@ public class LoginEvents extends Events {
clickHeaderButton("Reset");
}
@FindBy(xpath = "//button[text()[contains(.,'Filter')]]")
private WebElement filterButton;
public void filter() {
waitAjaxForBody();
filterButton.click();
}
@FindBy(tagName = "form")
private LoginEventsTableFilterForm filterForm;
public LoginEventsTableFilterForm filterForm() {
return filterForm;
}
public class LoginEventsTableFilterForm extends Form {
@FindBy(id = "client")
private WebElement clientInput;
@FindBy(id = "user")
private WebElement userInput;
@FindBy(xpath = "//div[@id='s2id_eventTypes']/ul")
private WebElement eventTypeInput;
@FindBy(xpath = "//div[@id='select2-drop']")
private WebElement eventTypeValues;
public void addEventType(String type) {
driver.findElement(By.xpath("//div[@id='s2id_eventTypes']/ul")).click();
driver.findElement(By.xpath("//div[@id='select2-drop']//div[text()='" + type + "']/..")).click();
eventTypeInput.click();
eventTypeValues.findElement(By.xpath("//div[text()='" + type + "']")).click();
}
public void removeOperationType(String type) {
driver.findElement(By.xpath("//div[@id='s2id_eventTypes']//div[text()='" + type + "']/../a")).click();
eventTypeInput.findElement(By.xpath("//div[text()='" + type + "']/../a]")).click();
}
@FindBy(id = "client")
private WebElement clientInput;
public void setClientInput(String value) {
setInputValue(clientInput, value);
}
@FindBy(id = "user")
private WebElement userInput;
public void setUserInput(String value) {
setInputValue(userInput, value);
}

View file

@ -0,0 +1,123 @@
package org.keycloak.testsuite.console.page.realm;
import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.jboss.arquillian.graphene.page.Page;
import org.keycloak.testsuite.console.page.fragment.OnOffSwitch;
import org.keycloak.testsuite.page.Form;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
/**
* @author mhajas
*/
public class BruteForceDetection extends SecurityDefenses {
@Override
public String getUriFragment() {
return super.getUriFragment() + "/brute-force";
}
@Page
private BruteForceDetectionForm form;
public BruteForceDetectionForm form() {
return form;
}
public class BruteForceDetectionForm extends Form {
@FindByJQuery("div[class='onoffswitch']")
private OnOffSwitch protectionEnabled;
@FindBy(id = "failureFactor")
private WebElement maxLoginFailures;
@FindBy(id = "waitIncrement")
private WebElement waitIncrementInput;
@FindBy(name = "waitIncrementUnit")
private Select waitIncrementSelect;
@FindBy(id = "quickLoginCheckMilliSeconds")
private WebElement quickLoginCheckInput;
@FindBy(id = "minimumQuickLoginWait")
private WebElement minQuickLoginWaitInput;
@FindBy(name = "minimumQuickLoginWaitUnit")
private Select minQuickLoginWaitSelect;
@FindBy(id = "maxFailureWait")
private WebElement maxWaitInput;
@FindBy(name = "maxFailureWaitUnit")
private Select maxWaitSelect;
@FindBy(id = "maxDeltaTime")
private WebElement failureResetTimeInput;
@FindBy(name = "maxDeltaTimeUnit")
private Select failureResetTimeSelect;
public void setProtectionEnabled(boolean protectionEnabled) {
this.protectionEnabled.setOn(protectionEnabled);
}
public void setMaxLoginFailures(String value) {
setInputValue(maxLoginFailures, value);
}
public void setWaitIncrementInput(String value) {
setInputValue(waitIncrementInput, value);
}
public void setWaitIncrementSelect(TimeSelectValues value) {
waitIncrementSelect.selectByVisibleText(value.getName());
}
public void setQuickLoginCheckInput(String value) {
setInputValue(quickLoginCheckInput, value);
}
public void setMinQuickLoginWaitInput(String value) {
setInputValue(minQuickLoginWaitInput, value);
}
public void setMinQuickLoginWaitSelect(TimeSelectValues value) {
minQuickLoginWaitSelect.selectByVisibleText(value.getName());
}
public void setMaxWaitInput(String value) {
setInputValue(maxWaitInput, value);
}
public void setMaxWaitSelect(TimeSelectValues value) {
maxWaitSelect.selectByVisibleText(value.getName());
}
public void setFailureResetTimeInput(String value) {
setInputValue(failureResetTimeInput, value);
}
public void setFailureResetTimeSelect(TimeSelectValues value) {
failureResetTimeSelect.selectByVisibleText(value.getName());
}
}
public enum TimeSelectValues {
SECONDS("Seconds"), MINUTES("Minutes"), HOURS("Hours"), DAYS("Days");
private String name;
private TimeSelectValues(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}

View file

@ -11,7 +11,7 @@ import org.openqa.selenium.support.FindBy;
* Created by mhajas on 8/25/15.
*/
public class EmailSettings extends RealmSettings {
@Override
public String getUriFragment() {
return super.getUriFragment() + "/smtp-settings";

View file

@ -0,0 +1,41 @@
package org.keycloak.testsuite.console.page.realm;
import org.jboss.arquillian.graphene.page.Page;
import org.keycloak.testsuite.page.Form;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/**
* @author mhajas
*/
public class Headers extends SecurityDefenses {
@Override
public String getUriFragment() {
return super.getUriFragment() + "/headers";
}
@Page
private HeadersForm form;
public HeadersForm form() {
return form;
}
public class HeadersForm extends Form {
@FindBy(id = "xFrameOptions")
private WebElement xFrameOptions;
@FindBy(id = "contentSecurityPolicy")
private WebElement contentSecurityPolicy;
public void setXFrameOptions(String value) {
setInputValue(xFrameOptions, value);
}
public void setContentSecurityPolicy(String value) {
setInputValue(contentSecurityPolicy, value);
}
}
}

View file

@ -18,13 +18,7 @@
package org.keycloak.testsuite.console.page.realm;
import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.jboss.arquillian.graphene.page.Page;
import org.keycloak.testsuite.console.page.fragment.OnOffSwitch;
import org.keycloak.testsuite.page.Form;
import static org.keycloak.testsuite.page.Form.setInputValue;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
/**
* @author Filip Kiss
@ -37,160 +31,16 @@ public class SecurityDefenses extends RealmSettings {
return super.getUriFragment() + "/defense"; // NOTE: page doesn't exist, only subpages
}
public class Headers extends SecurityDefenses {
@Override
public String getUriFragment() {
return super.getUriFragment() + "/headers";
}
@Page
private HeadersForm form;
public HeadersForm form() {
return form;
}
public class HeadersForm extends Form {
@FindBy(id = "xFrameOptions")
private WebElement xFrameOptions;
public void setXFrameOptions(String value) {
setInputValue(xFrameOptions, value);
}
@FindBy(id = "contentSecurityPolicy")
private WebElement contentSecurityPolicy;
public void setContentSecurityPolicy(String value) {
setInputValue(contentSecurityPolicy, value);
}
}
}
public enum TimeSelectValues {
SECONDS("Seconds"), MINUTES("Minutes"), HOURS("Hours"), DAYS("Days");
private String name;
private TimeSelectValues(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class BruteForceDetection extends SecurityDefenses {
@Override
public String getUriFragment() {
return super.getUriFragment() + "/brute-force";
}
@Page
private BruteForceDetectionForm form;
public BruteForceDetectionForm form() {
return form;
}
public class BruteForceDetectionForm extends Form {
@FindByJQuery("div[class='onoffswitch']")
private OnOffSwitch protectionEnabled;
public void setProtectionEnabled(boolean protectionEnabled) {
this.protectionEnabled.setOn(protectionEnabled);
}
@FindBy(id = "failureFactor")
private WebElement maxLoginFailures;
public void setMaxLoginFailures(String value) {
setInputValue(maxLoginFailures, value);
}
@FindBy(id = "waitIncrement")
private WebElement waitIncrementInput;
@FindBy(name = "waitIncrementUnit")
private Select waitIncrementSelect;
public void setWaitIncrementInput(String value) {
setInputValue(waitIncrementInput, value);
}
public void setWaitIncrementSelect(TimeSelectValues value) {
waitIncrementSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "quickLoginCheckMilliSeconds")
private WebElement quickLoginCheckInput;
public void setQuickLoginCheckInput(String value) {
setInputValue(quickLoginCheckInput, value);
}
@FindBy(id = "minimumQuickLoginWait")
private WebElement minQuickLoginWaitInput;
@FindBy(name = "minimumQuickLoginWaitUnit")
private Select minQuickLoginWaitSelect;
public void setMinQuickLoginWaitInput(String value) {
setInputValue(minQuickLoginWaitInput, value);
}
public void setMinQuickLoginWaitSelect(TimeSelectValues value) {
minQuickLoginWaitSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "maxFailureWait")
private WebElement maxWaitInput;
@FindBy(name = "maxFailureWaitUnit")
private Select maxWaitSelect;
public void setMaxWaitInput(String value) {
setInputValue(maxWaitInput, value);
}
public void setMaxWaitSelect(TimeSelectValues value) {
maxWaitSelect.selectByVisibleText(value.getName());
}
@FindBy(id = "maxDeltaTime")
private WebElement failureResetTimeInput;
@FindBy(name = "maxDeltaTimeUnit")
private Select failureResetTimeSelect;
public void setFailureResetTimeInput(String value) {
setInputValue(failureResetTimeInput, value);
}
public void setFailureResetTimeSelect(TimeSelectValues value) {
failureResetTimeSelect.selectByVisibleText(value.getName());
}
}
}
@FindByJQuery("a:contains('Brute Force Detection')")
private WebElement bruteForceDetectionTab;
@FindByJQuery("a:contains('Headers')")
private WebElement headersTab;
public void goToBruteForceDetection() {
bruteForceDetectionTab.click();
}
@FindByJQuery("a:contains('Headers')")
private WebElement headersTab;
public void goToHeaders() {
headersTab.click();
}

View file

@ -22,9 +22,9 @@ import org.junit.Before;
import org.junit.Test;
import org.keycloak.testsuite.console.AbstractConsoleTest;
import org.keycloak.testsuite.console.page.authentication.PasswordPolicy;
import org.keycloak.testsuite.console.page.users.UserCredentials;
import static org.keycloak.testsuite.console.page.authentication.PasswordPolicy.Type.*;
import org.keycloak.testsuite.console.page.users.UserCredentials;
/**
* @author Petr Mensik

View file

@ -19,7 +19,6 @@ package org.keycloak.testsuite.console.authentication;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testsuite.auth.page.login.Registration;
@ -51,49 +50,17 @@ public class RequiredActionsTest extends AbstractConsoleTest {
super.setDefaultPageUriParameters();
testRealmRegistrationPage.setAuthRealm("test");
}
@Before
public void beforeRequiredActionsTest() {
requiredActionsPage.navigateTo();
}
@Test
public void requiredActionsTest() {
requiredActionsPage.clickTermsAndConditionEnabled();
assertFlashMessageSuccess();
requiredActionsPage.clickTermsAndConditionDefaultAction();
assertFlashMessageSuccess();
requiredActionsPage.clickVerifyEmailEnabled();
assertFlashMessageSuccess();
requiredActionsPage.clickVerifyEmailDefaultAction();
assertFlashMessageSuccess();
requiredActionsPage.clickUpdatePasswordEnabled();
assertFlashMessageSuccess();
requiredActionsPage.clickUpdatePasswordDefaultAction();
assertFlashMessageSuccess();
requiredActionsPage.clickConfigureTotpEnabled();
assertFlashMessageSuccess();
requiredActionsPage.clickConfigureTotpDefaultAction();
assertFlashMessageSuccess();
requiredActionsPage.clickUpdateProfileEnabled();
assertFlashMessageSuccess();
requiredActionsPage.clickUpdateProfileDefaultAction();
assertFlashMessageSuccess();
}
@Test
public void termsAndConditionsDefaultActionTest() {
requiredActionsPage.clickTermsAndConditionEnabled();
requiredActionsPage.clickTermsAndConditionDefaultAction();
requiredActionsPage.setTermsAndConditionEnabled(true);
requiredActionsPage.setTermsAndConditionDefaultAction(true);
assertFlashMessageSuccess();
allowTestRealmUserRegistration();
@ -106,7 +73,8 @@ public class RequiredActionsTest extends AbstractConsoleTest {
@Test
public void configureTotpDefaultActionTest() {
requiredActionsPage.clickConfigureTotpDefaultAction();
requiredActionsPage.setConfigureTotpDefaultAction(true);
assertFlashMessageSuccess();
allowTestRealmUserRegistration();

View file

@ -21,7 +21,7 @@ import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.testsuite.auth.page.account.Account;
import org.keycloak.testsuite.console.page.realm.SecurityDefenses;
import org.keycloak.testsuite.console.page.realm.BruteForceDetection;
import org.keycloak.testsuite.console.page.users.UserAttributes;
import org.keycloak.testsuite.console.page.users.Users;
import org.openqa.selenium.By;
@ -41,7 +41,7 @@ import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
public class SecurityDefensesTest extends AbstractRealmTest {
@Page
private SecurityDefenses.BruteForceDetection bruteForceDetectionPage;
private BruteForceDetection bruteForceDetectionPage;
@Page
private Account testRealmAccountPage;
@ -69,7 +69,7 @@ public class SecurityDefensesTest extends AbstractRealmTest {
bruteForceDetectionPage.form().setProtectionEnabled(true);
bruteForceDetectionPage.form().setMaxLoginFailures("1");
bruteForceDetectionPage.form().setWaitIncrementSelect(SecurityDefenses.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setWaitIncrementSelect(BruteForceDetection.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setWaitIncrementInput(String.valueOf(secondsToWait));
bruteForceDetectionPage.form().save();
assertFlashMessageSuccess();
@ -110,7 +110,7 @@ public class SecurityDefensesTest extends AbstractRealmTest {
bruteForceDetectionPage.form().setProtectionEnabled(true);
bruteForceDetectionPage.form().setMaxLoginFailures("100");
bruteForceDetectionPage.form().setQuickLoginCheckInput("1500");
bruteForceDetectionPage.form().setMinQuickLoginWaitSelect(SecurityDefenses.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setMinQuickLoginWaitSelect(BruteForceDetection.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setMinQuickLoginWaitInput(String.valueOf(secondsToWait));
bruteForceDetectionPage.form().save();
assertFlashMessageSuccess();
@ -150,7 +150,7 @@ public class SecurityDefensesTest extends AbstractRealmTest {
bruteForceDetectionPage.form().setProtectionEnabled(true);
bruteForceDetectionPage.form().setMaxLoginFailures("1");
bruteForceDetectionPage.form().setMaxWaitSelect(SecurityDefenses.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setMaxWaitSelect(BruteForceDetection.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setMaxWaitInput(String.valueOf(secondsToWait));
bruteForceDetectionPage.form().save();
@ -190,7 +190,7 @@ public class SecurityDefensesTest extends AbstractRealmTest {
bruteForceDetectionPage.form().setProtectionEnabled(true);
bruteForceDetectionPage.form().setMaxLoginFailures("2");
bruteForceDetectionPage.form().setFailureResetTimeSelect(SecurityDefenses.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setFailureResetTimeSelect(BruteForceDetection.TimeSelectValues.SECONDS);
bruteForceDetectionPage.form().setFailureResetTimeInput(String.valueOf(secondsToWait));
bruteForceDetectionPage.form().save();
assertFlashMessageSuccess();
@ -223,7 +223,7 @@ public class SecurityDefensesTest extends AbstractRealmTest {
public void userUnlockTest() {
bruteForceDetectionPage.form().setProtectionEnabled(true);
bruteForceDetectionPage.form().setMaxLoginFailures("1");
bruteForceDetectionPage.form().setWaitIncrementSelect(SecurityDefenses.TimeSelectValues.MINUTES);
bruteForceDetectionPage.form().setWaitIncrementSelect(BruteForceDetection.TimeSelectValues.MINUTES);
bruteForceDetectionPage.form().setWaitIncrementInput("10");
bruteForceDetectionPage.form().save();
assertFlashMessageSuccess();

View file

@ -1,28 +1,24 @@
package org.keycloak.testsuite.console.users;
import static org.jboss.arquillian.graphene.Graphene.waitGui;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Test;
import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD;
import static org.keycloak.testsuite.auth.page.AuthRealm.TEST;
import org.keycloak.testsuite.auth.page.account.Account;
import org.keycloak.testsuite.auth.page.login.UpdateAccount;
import org.keycloak.testsuite.auth.page.login.UpdatePassword;
import org.keycloak.testsuite.console.page.authentication.RequiredActions;
import org.keycloak.testsuite.console.page.users.UserAttributes;
import static org.keycloak.testsuite.model.RequiredUserAction.TERMS_AND_CONDITIONS;
import static org.keycloak.testsuite.model.RequiredUserAction.UPDATE_PASSWORD;
import static org.keycloak.testsuite.model.RequiredUserAction.UPDATE_PROFILE;
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import static org.jboss.arquillian.graphene.Graphene.waitGui;
import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD;
import static org.keycloak.testsuite.auth.page.AuthRealm.TEST;
import static org.keycloak.testsuite.model.RequiredUserAction.*;
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
/**
*
* @author tkyjovsk
* @author mhajas
*/
@ -124,7 +120,7 @@ public class RequiredUserActionsTest extends AbstractUserTest {
@Test
public void termsAndConditions() {
requiredActionsPage.navigateTo();
requiredActionsPage.clickTermsAndConditionEnabled();
requiredActionsPage.setTermsAndConditionEnabled(true);
manage().users();
usersPage.table().viewAllUsers();
@ -142,6 +138,4 @@ public class RequiredUserActionsTest extends AbstractUserTest {
}
}