diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/account.ftl b/forms/src/main/resources/META-INF/resources/forms/theme/default/account.ftl index e5a0a6e2ab..4e7caac665 100755 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/account.ftl +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/account.ftl @@ -15,7 +15,7 @@
* - +
* @@ -27,7 +27,7 @@
- « Back to my application + <#--a href="#">« Back to my application
diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/admin-console.css b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/admin-console.css index af63a630f7..476a082d6f 100644 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/admin-console.css +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/admin-console.css @@ -185,43 +185,6 @@ table a:hover { font-weight: normal; margin-left: 1em; } -.tooltip-box { - position: absolute; - font-size: 1em; - background-image: url("img/tooltip-box-arrow-right-up.svg"); - background-position: right top; - background-repeat: no-repeat; - padding-top: 1em; - right: 0; - top: 1.5em; - font-size: 0.90909090909091em; -} -.tooltip-box fieldset { - width: 30.8em; - padding-left: 1.5em; - padding-right: 1.5em; - padding-top: .5em; - background-color: #fff; - border: 1px solid #b6b6b6; - border-top: none; - border-radius: 0 2px 2px 2px; - box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.15); -} -.tooltip-box fieldset legend { - display: none; -} -.tooltip-box fieldset label { - width: 6em; -} -.tooltip-box fieldset .form-actions { - margin: 0; - padding: 1em 1.5em 1em 0; - background-color: #f8f8f8; - display: block; - float: none; - margin-right: -1.5em; - margin-left: -1.5em; -} td.token-cell button { margin-top: -1px; } diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/forms.css b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/forms.css index 0d6bfbf985..1dc3c5d9fd 100644 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/forms.css +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/forms.css @@ -307,9 +307,7 @@ button[class^="icon-"] { padding: 0; line-height: 1em; } -button[class^="icon-"]:hover { - background-image: url(img/sprites.png); -} + legend { font-size: 1em; border-width: 1px 0 0 0; @@ -328,14 +326,7 @@ legend .text { font-weight: bold; font-size: 1.25em; } -legend .icon-info { - background-image: url(img/sprites-gray.png); - margin-left: 1em; - vertical-align: baseline; -} -legend .icon-info:hover { - background-image: url(img/sprites.png); -} + .form-group { display: block; margin-bottom: 1em; @@ -377,7 +368,7 @@ legend + table { margin-top: 1em; } .code { - font-family: Courier, ​monospace; + font-family: Courier, monospace; } .onoffswitch { -moz-user-select: none; @@ -460,20 +451,6 @@ input[type="email"].tiny { min-width: 40px; width: 40px; } -.select-rcue, -.select2-container .select2-choice { - height: 26px; - border: 1px #b6b6b6 solid; - border-radius: 2px; - box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - color: #333; - background: #ffffff url(img/select-arrow.png) no-repeat right center; - overflow: hidden; - min-width: 75px; - padding: 0 0.9em 0 0; - display: inline-block; - font-family: "Open Sans", sans-serif; -} .select-rcue:hover { border-color: #62afdb; } @@ -510,93 +487,7 @@ input[type="email"].tiny { .select-rcue option:hover { background-color: #d5ecf9; } -.select2-container { - float: left; - margin-top: 0.3em; - margin-bottom: 0.3em; -} -.select2-container .select2-choice > .select2-chosen { - line-height: 2.1em; - padding-left: 0.90909090909091em; - margin-right: 0; - font-size: 1.1em; - padding-right: 2.36363636363636em; - padding-right: 26px; -} -.select2-container .select2-choice .select2-arrow { - display: none; -} -.select2-dropdown-open { - background-color: #fff; -} -.select2-dropdown-open .select2-choice, -.select2-dropdown-open .select2-choices { - border-bottom: none; - border-radius: 2px 2px 0 0; - background-image: url(img/chosen-arrow-down.png); - background-color: transparent; - background-repeat: no-repeat; - background-position: right top; - box-shadow: none; -} -.select2-dropdown-open .select2-choice, -.select2-dropdown-open.select2-drop-above .select2-choice, -.select2-dropdown-open .select2-choices, -.select2-dropdown-open.select2-drop-above .select2-choices { - border-color: #62AFDB; -} -.select2-search input { - min-width: 0; -} -.select2-drop-active { - border-radius: 0 0 2px 2px; - margin-top: -1px; - padding-top: 4px; -} -.select2-container.select2-drop-above .select2-choice { - border-radius: 0 0 2px 2px; - background-image: url(img/chosen-arrow-up.png); - background-repeat: no-repeat; - background-position: right 0; - box-shadow: none; -} -.select2-drop.select2-drop-above { - border-radius: 2px 2px 0 0; - padding-top: 0; - margin-top: 2px; -} -.select2-drop.select2-drop-above.select2-drop-active, -.select2-drop-active { - border-color: #62AFDB; -} -.select2-results { - padding-left: 0; - margin-right: 0; -} -.select2-results li { - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; -} -.select2-results .select2-result-label, -.select2-results .select2-no-results, -.select2-results .select2-searching, -.select2-results .select2-selection-limit { - font-size: 1.1em; - padding-left: 1.09090909090909em; -} -.select2-results .select2-no-results, -.select2-results .select2-searching, -.select2-results .select2-selection-limit { - color: #838383; - padding-top: 3px; - padding-bottom: 4px; -} -.select2-results .select2-highlighted { - background-color: #d5ecf9; - border-top: 1px solid #a7d7f1; - border-bottom: 1px solid #a7d7f1; - color: #4d5258; -} + .input-group input + .select-rcue { border-radius: 0 2px 2px 0; border-left: 0; @@ -605,93 +496,7 @@ input[type="email"].tiny { .input-select .input-group input { float: left; } -.tokenfield.form-control { - width: 40em; - float: left; - min-height: 2.6em; - border: 1px #b6b6b6 solid; - border-radius: 2px; - box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - padding: 0 0.7em; - margin-bottom: 0; - font-size: 1em; - height: auto; - outline: 0 none; -} -.tokenfield.form-control .token { - display: inline-block; - background-color: #d4ecf8; - border: 1px solid #a3d7f0; - border-radius: 1px; - padding: 0 0.3em 0 0.7em; - margin-right: 0.7em; - margin-top: 0.3em; - margin-bottom: 0.3em; - outline: 0 none; -} -.tokenfield.form-control .token span { - float: left; - font-size: 1.1em; - line-height: 1.45454545454545em; -} -.tokenfield.form-control .token .close { - text-indent: -99999em; - width: 1.6em; - height: 1.6em; - line-height: 1.6em; - background: url(img/btn-close-blue.png) no-repeat center center; - margin-left: 0.3em; - padding: 0; - border: none; - font-size: 1em; - opacity: 1; -} -.tokenfield.form-control input { - padding: 0; - border: none; - font-size: 1.1em; - line-height: 1.63636363636364em; - height: 1.63636363636364em; - margin: 0.272727272727273em 0; - box-shadow: none; - outline: 0 none; - float: left; -} -.tokenfield.form-control:hover { - border-color: #62afdb; -} -.tokenfield.form-control:focus { - border-color: #62afdb; - box-shadow: #62afdb 0 0 5px; -} -.token { - float: left; - background-color: #d4ecf8; - border: 1px solid #a3d7f0; - border-radius: 1px; - padding: 0 0.3em 0 0.7em; - margin-right: 0.7em; - margin-top: 0.3em; - margin-bottom: 0.3em; - outline: 0 none; -} -.token span { - float: left; - font-size: 1.1em; - line-height: 1.45454545454545em; -} -.token .close { - text-indent: -9999999em; - width: 1.6em; - height: 1.6em; - line-height: 1.6em; - background: url(img/btn-close-blue.png) no-repeat center center; - margin-left: 0.3em; - padding: 0; - border: none; - font-size: 1em; - opacity: 1; -} + .form-actions { float: right; margin-top: 3em; diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/btn-social-fb.svg b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/btn-social-fb.svg deleted file mode 100644 index fef04884d3..0000000000 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/btn-social-fb.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/customer-login-screen-bg.svg b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/customer-login-screen-bg.svg deleted file mode 100644 index 6c4f813566..0000000000 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/customer-login-screen-bg.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/feedback-error-arrow-down.svg b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/feedback-error-arrow-down.svg deleted file mode 100644 index 2c79bdcde1..0000000000 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/feedback-error-arrow-down.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/feedback-error-sign.svg b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/feedback-error-sign.svg deleted file mode 100644 index 62c417847d..0000000000 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/feedback-error-sign.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-separator.png b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-separator.png new file mode 100644 index 0000000000..5ea210ccf1 Binary files /dev/null and b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-separator.png differ diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-separator.svg b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-separator.svg deleted file mode 100644 index c897e9d340..0000000000 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-separator.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-social-separators.svg b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-social-separators.svg deleted file mode 100644 index 429957dfaf..0000000000 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/img/login-register-social-separators.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css index eca69a22c3..488259d9d3 100644 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css @@ -3,9 +3,9 @@ body { min-height: 60em; min-width: 120em; } + .rcue-login-register { background-color: #1D2226; - background-image: url("img/login-screen-background.jpg"); background-position: top left; background-size: auto; background-repeat: no-repeat; @@ -17,6 +17,7 @@ body { /* Info area */ } + .rcue-login-register h1 a { position: absolute; top: 5em; @@ -61,12 +62,12 @@ body { padding-right: 4.5em; } .rcue-login-register .form-area { - background-image: url(img/login-register-separator.svg); + background-image: url(img/login-register-separator.png); background-repeat: no-repeat; background-position: 40.2em center; } .rcue-login-register .form-area.social { - background-image: url(img/login-register-social-separators.svg); + background-image: url(img/login-register-social-separators.png); background-position: 39.6em center; } .rcue-login-register .section > p { @@ -267,10 +268,6 @@ a.zocial:before { .rcue-login-register.register form > div.aside-btn p { line-height: 1.3em; } -/* Customer login */ -.rcue-login-register.customer { - background-image: url("img/customer-login-screen-bg2.jpg"); -} .rcue-login-register p.powered { font-size: 1.1em; margin-top: 1.27272727272727em; @@ -402,11 +399,6 @@ a.zocial:before { .rcue-login-register.email label { width: 6.78571428571429em; } -.rcue-login-register.email .form-area.email { - background-position: 40.6em center; - background-image: url(img/login-register-email-separator.svg); - background-repeat: no-repeat; -} .rcue-login-register.email .feedback.bottom-left { left: 38.3em; } diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/sprites.css b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/sprites.css index 1a35f748bd..1c009b7032 100755 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/sprites.css +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/sprites.css @@ -3,7 +3,6 @@ display: inline-block; width: 16px; height: 16px; - background-image: url(img/sprites.png); /* Modified by Gabriel */ background-repeat: no-repeat; text-indent: -99999em; margin-right: 0.5em; diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/tables.css b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/tables.css index 15a1f343bf..b260561b30 100644 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/tables.css +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/tables.css @@ -30,14 +30,6 @@ table thead tr th { .rcue-table-actions { padding: 1px; } -/* -.rcue-table-actions button { - padding: 3px 8px; - font-size: 11px; - box-shadow: 1px 2px 2px #e3e3e3; - margin: 4px; -} -*/ .rcue-table-number { text-align: right; width: 100px; @@ -54,11 +46,7 @@ table thead tr th { background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(1, 0, #eeeeee)); border-bottom: 1px #cedede solid; } -/* -table tbody tr td:first-child { - color: #0099d3; -} -*/ + table thead tr th:last-child { border-right: none; } @@ -70,12 +58,7 @@ table tbody tr:first-child td { table tbody tr td:last-child { border-right: none; } -/* -table tbody tr:hover { - cursor: pointer; - background-color: #ebebeb; -} -*/ + /* Styles from Gabriel */ .rcue-table-actions button + button, .rcue-table-actions .button + button { @@ -109,23 +92,7 @@ table tbody tr td.token-cell button { margin-bottom: 7px; margin-top: 8px; } -table tbody.selectable-rows tr:hover { - cursor: pointer; - background-color: #ebebeb; -} -table tbody.selectable-rows tr:first-child td { - padding-top: 9px; -} -table tbody.selectable-rows tr.selected, -table tbody.selectable-rows tr.selected:hover { - background-color: #eaf5fb; -} -table tbody.selectable-rows tr.selected td:first-child, -table tbody.selectable-rows tr.selected:hover td:first-child { - background-image: url(img/icon-row-selected.svg); - background-position: 0.2em center; - background-repeat: no-repeat; -} + table tfoot tr { border-top: 1px solid #cecece; } diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/img/favicon.ico b/forms/src/main/resources/META-INF/resources/forms/theme/default/img/favicon.ico new file mode 100644 index 0000000000..cbb6124938 Binary files /dev/null and b/forms/src/main/resources/META-INF/resources/forms/theme/default/img/favicon.ico differ diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/password.ftl b/forms/src/main/resources/META-INF/resources/forms/theme/default/password.ftl index b2ae5294ce..5c48264bb0 100755 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/password.ftl +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/password.ftl @@ -15,15 +15,15 @@
- +
- +
- « Back to my application + <#--a href="#">« Back to my application
diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/template-main.ftl b/forms/src/main/resources/META-INF/resources/forms/theme/default/template-main.ftl index 19a95ee7fe..61e24a866a 100644 --- a/forms/src/main/resources/META-INF/resources/forms/theme/default/template-main.ftl +++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/template-main.ftl @@ -4,16 +4,15 @@ Edit Account - <#nested "title"> + - - @@ -21,16 +20,12 @@ - - - - @@ -70,7 +65,7 @@
  • Password
  • Authenticator
  • <#--
  • Social Accounts
  • --> -
  • Authorized Access
  • + <#--
  • Authorized Access
  • --> diff --git a/forms/src/main/resources/org/keycloak/forms/messages.properties b/forms/src/main/resources/org/keycloak/forms/messages.properties index 8fb4f12000..7c8b05fc51 100644 --- a/forms/src/main/resources/org/keycloak/forms/messages.properties +++ b/forms/src/main/resources/org/keycloak/forms/messages.properties @@ -61,4 +61,7 @@ emailUpdateHeader=Update password emailSent=You should receive an email shortly with further instructions. emailError=Invalid username or email. emailErrorInfo=Please, fill in the fields again. -emailInstruction=Enter your username and email address and we will send you instructions on how to create a new password. \ No newline at end of file +emailInstruction=Enter your username and email address and we will send you instructions on how to create a new password. + +accountUpdated=Your account has been updated +accountPasswordUpdated=Your password has been updated \ No newline at end of file diff --git a/services/src/main/java/org/keycloak/services/resources/AccountService.java b/services/src/main/java/org/keycloak/services/resources/AccountService.java index 2a543238a6..88572713f4 100755 --- a/services/src/main/java/org/keycloak/services/resources/AccountService.java +++ b/services/src/main/java/org/keycloak/services/resources/AccountService.java @@ -131,12 +131,20 @@ public class AccountService { @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public Response processAccountUpdate(final MultivaluedMap formData) { + UserModel user = getUser(true); + + String error = Validation.validateUpdateProfileForm(formData); + if (error != null) { + return Flows.forms(realm, request, uriInfo).setUser(user).setError(error).forwardToAccount(); + } + user.setFirstName(formData.getFirst("firstName")); user.setLastName(formData.getFirst("lastName")); user.setEmail(formData.getFirst("email")); - return Flows.forms(realm, request, uriInfo).setUser(user).forwardToAccount(); + return Flows.forms(realm, request, uriInfo).setUser(user).setError("accountUpdated") + .setErrorType(FormFlows.MessageType.SUCCESS).forwardToAccount(); } @Path("totp-remove") @@ -205,7 +213,8 @@ public class AccountService { realm.updateCredential(user, credentials); - return Flows.forms(realm, request, uriInfo).setUser(user).forwardToPassword(); + return Flows.forms(realm, request, uriInfo).setUser(user).setError("accountPasswordUpdated") + .setErrorType(FormFlows.MessageType.SUCCESS).forwardToPassword(); } @Path("login-redirect") diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AccountTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AccountTest.java index 4f8e75ada3..5b1a82725d 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AccountTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AccountTest.java @@ -39,6 +39,8 @@ import org.keycloak.testsuite.rule.KeycloakRule.KeycloakSetup; import org.keycloak.testsuite.rule.WebResource; import org.keycloak.testsuite.rule.WebRule; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; import org.picketlink.idm.credential.util.TimeBasedOTP; /** @@ -96,8 +98,18 @@ public class AccountTest { changePasswordPage.open(); loginPage.login("test-user@localhost", "password"); + changePasswordPage.changePassword("", "new-password", "new-password"); + + Assert.assertTrue(profilePage.isError()); + + changePasswordPage.changePassword("password", "new-password", "new-password2"); + + Assert.assertTrue(profilePage.isError()); + changePasswordPage.changePassword("password", "new-password", "new-password"); + Assert.assertTrue(profilePage.isSuccess()); + changePasswordPage.logout(); loginPage.open(); @@ -120,8 +132,31 @@ public class AccountTest { Assert.assertEquals("", profilePage.getLastName()); Assert.assertEquals("test-user@localhost", profilePage.getEmail()); + // All fields are required, so there should be an error when something is missing. + profilePage.updateProfile("", "New last", "new@email.com"); + + Assert.assertTrue(profilePage.isError()); + Assert.assertEquals("", profilePage.getFirstName()); + Assert.assertEquals("", profilePage.getLastName()); + Assert.assertEquals("test-user@localhost", profilePage.getEmail()); + + profilePage.updateProfile("New first", "", "new@email.com"); + + Assert.assertTrue(profilePage.isError()); + Assert.assertEquals("", profilePage.getFirstName()); + Assert.assertEquals("", profilePage.getLastName()); + Assert.assertEquals("test-user@localhost", profilePage.getEmail()); + + profilePage.updateProfile("New first", "New last", ""); + + Assert.assertTrue(profilePage.isError()); + Assert.assertEquals("", profilePage.getFirstName()); + Assert.assertEquals("", profilePage.getLastName()); + Assert.assertEquals("test-user@localhost", profilePage.getEmail()); + profilePage.updateProfile("New first", "New last", "new@email.com"); + Assert.assertTrue(profilePage.isSuccess()); Assert.assertEquals("New first", profilePage.getFirstName()); Assert.assertEquals("New last", profilePage.getLastName()); Assert.assertEquals("new@email.com", profilePage.getEmail()); @@ -136,8 +171,15 @@ public class AccountTest { Assert.assertFalse(driver.getPageSource().contains("Remove Google")); + // Error with false code + totpPage.configure(totp.generate(totpPage.getTotpSecret()+"123")); + + Assert.assertTrue(profilePage.isError()); + totpPage.configure(totp.generate(totpPage.getTotpSecret())); + Assert.assertTrue(profilePage.isSuccess()); + Assert.assertTrue(driver.getPageSource().contains("Remove Google")); } diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java index 7c99e1bc53..a9f64958bc 100644 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java @@ -44,6 +44,9 @@ public class AccountUpdateProfilePage extends AbstractAccountPage { @FindBy(css = "button[type=\"submit\"]") private WebElement submitButton; + @FindBy(css = ".feedback > p > strong") + private WebElement feedbackMessage; + public void updateProfile(String firstName, String lastName, String email) { firstNameInput.clear(); firstNameInput.sendKeys(firstName); @@ -75,4 +78,11 @@ public class AccountUpdateProfilePage extends AbstractAccountPage { driver.navigate().to(PATH); } + public boolean isSuccess(){ + return feedbackMessage != null && "Success!".equals(feedbackMessage.getText()); + } + + public boolean isError(){ + return feedbackMessage != null && "Error!".equals(feedbackMessage.getText()); + } }