From 35bfdb3c96cee981d5a315f71181c5e81703f128 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Tue, 11 Jun 2024 15:54:44 +0300 Subject: [PATCH 01/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../main/java/io/github/com/StaticSite.java | 10 ++- .../java/io/github/com/pages/AngularPage.java | 2 - ...SnackbarSection.java => SnackBarPage.java} | 5 +- .../tests/elements/complex/SnackbarTests.java | 62 +++++++------- .../light/angular/asserts/SnackbarAssert.java | 16 ++-- .../angular/elements/complex/Snackbar.java | 54 ++++++++++-- .../angular/elements/enums/Position.java | 82 +++++++++++++++++++ .../elements/interfaces/HasPosition.java | 35 ++++++++ 8 files changed, 211 insertions(+), 55 deletions(-) rename jdi-light-angular-tests/src/main/java/io/github/com/pages/{sections/SnackbarSection.java => SnackBarPage.java} (84%) create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasPosition.java diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/StaticSite.java b/jdi-light-angular-tests/src/main/java/io/github/com/StaticSite.java index 0c329d4132..7870c37d20 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/StaticSite.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/StaticSite.java @@ -5,15 +5,16 @@ import io.github.com.pages.AngularPage; import io.github.com.pages.AutocompletePage; import io.github.com.pages.BadgePage; -import io.github.com.pages.InputPage; import io.github.com.pages.ButtonTogglePage; import io.github.com.pages.ButtonsPage; import io.github.com.pages.CheckBoxPage; import io.github.com.pages.DividerPage; +import io.github.com.pages.InputPage; import io.github.com.pages.ProgressBarPage; import io.github.com.pages.ProgressSpinnerPage; import io.github.com.pages.RadioButtonPage; import io.github.com.pages.SlideTogglePage; +import io.github.com.pages.SnackBarPage; @JSite("https://jdi-testing.github.io/jdi-light/angular-page/#/") public class StaticSite { @@ -37,10 +38,10 @@ public class StaticSite { public static BadgePage badgePage; @Url("buttons_toggle") - public static ButtonTogglePage buttonTogglePage; + public static ButtonTogglePage buttonTogglePage; @Url("divider") - public static DividerPage dividerPage; + public static DividerPage dividerPage; @Url("autocompletes") public static AutocompletePage autocompletePage; @@ -53,4 +54,7 @@ public class StaticSite { @Url("slide_toggle") public static SlideTogglePage slideTogglePage; + + @Url("snack_bar") + public static SnackBarPage snackBarPage; } diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/AngularPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/AngularPage.java index 776bc1c465..690b23fdd7 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/AngularPage.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/AngularPage.java @@ -7,7 +7,6 @@ import com.epam.jdi.light.ui.html.elements.common.Icon; import io.github.com.pages.sections.GridListSection; import io.github.com.pages.sections.ListSection; -import io.github.com.pages.sections.SnackbarSection; import io.github.com.pages.sections.TabGroupSection; import io.github.com.pages.sections.TableSection; @@ -22,7 +21,6 @@ public class AngularPage extends WebPage { public static Dialog dialog; public static ListSection listSection; public static GridListSection gridListSection; - public static SnackbarSection snackbarSection; public static TabGroupSection tabsSection; public static TableSection tableSection; } diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/SnackbarSection.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java similarity index 84% rename from jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/SnackbarSection.java rename to jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java index 6583b5e363..a743f30d60 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/SnackbarSection.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java @@ -1,12 +1,11 @@ -package io.github.com.pages.sections; +package io.github.com.pages; import com.epam.jdi.light.angular.elements.complex.Snackbar; -import com.epam.jdi.light.elements.composite.Section; import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; import com.epam.jdi.light.ui.html.elements.common.Button; import com.epam.jdi.light.ui.html.elements.common.TextField; -public class SnackbarSection extends Section { +public class SnackBarPage extends AngularPage { @UI("#snack-bar-message-input") public TextField messageInput; diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index 5fa5fcd158..51ec1397c6 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -2,55 +2,54 @@ import com.jdiai.tools.func.JAction; import io.github.epam.TestsInit; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Ignore; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import static io.github.com.StaticSite.angularPage; -import static io.github.com.pages.AngularPage.snackbarSection; -import static io.github.epam.site.steps.States.shouldBeLoggedIn; +import static com.jdiai.tools.Timer.waitCondition; +import static io.github.com.StaticSite.snackBarPage; + -// TODO Move to the new page -@Ignore public class SnackbarTests extends TestsInit { private static final String MESSAGE = "Test Message"; private static final String ACTION = "Test Action"; - @BeforeMethod + @BeforeClass public void before() { - shouldBeLoggedIn(); - angularPage.shouldBeOpened(); + snackBarPage.open(); + waitCondition(() -> snackBarPage.isOpened()); + snackBarPage.checkOpened(); } @Test public void checkBasicSnackbarTest() { - snackbarSection.messageInput.setValue(MESSAGE); - snackbarSection.actionInput.setValue(ACTION); - snackbarSection.openButton.click(); + snackBarPage.messageInput.setValue(MESSAGE); + snackBarPage.actionInput.setValue(ACTION); + snackBarPage.openButton.click(); - snackbarSection.basicSnackbar.is().displayed(); - snackbarSection.basicSnackbar.has().message(MESSAGE); - snackbarSection.basicSnackbar.has().action(ACTION); + snackBarPage.basicSnackbar.is().displayed(); + snackBarPage.basicSnackbar.has().message(MESSAGE); + snackBarPage.basicSnackbar.actionIcon().has().text(ACTION); } @Test public void checkSnackbarClickActionDismissTest() { - snackbarSection.messageInput.setValue(MESSAGE); - snackbarSection.actionInput.setValue(ACTION); - snackbarSection.openButton.click(); + snackBarPage.messageInput.setValue(MESSAGE); + snackBarPage.actionInput.setValue(ACTION); + snackBarPage.openButton.click(); - snackbarSection.basicSnackbar.clickAction(); - snackbarSection.basicSnackbar.is().disappear(); + snackBarPage.basicSnackbar.actionIcon().click(); + snackBarPage.basicSnackbar.is().disappear(); } @Test public void checkSnackbarWithNoActionTest() { - snackbarSection.messageInput.setValue(MESSAGE); - snackbarSection.actionInput.setValue(""); - snackbarSection.openButton.click(); + snackBarPage.messageInput.setValue(MESSAGE); + snackBarPage.actionInput.setValue(""); + snackBarPage.openButton.click(); - snackbarSection.basicSnackbar.has().action(); + snackBarPage.basicSnackbar.has().shown(); + snackBarPage.basicSnackbar.actionIcon().has().notAppear(); } @Test @@ -58,13 +57,10 @@ public void checkSnackbarDurationTest() { final int DURATION = 5; JAction action = () -> { - snackbarSection.customSnackbar.base().timer().wait(() -> snackbarSection.customSnackbar.isDisplayed()); - snackbarSection.customSnackbar.base().timer().wait(() -> snackbarSection.customSnackbar.isHidden()); + snackBarPage.customSnackbar.base().timer().wait(() -> snackBarPage.customSnackbar.isDisplayed()); + snackBarPage.customSnackbar.base().timer().wait(() -> snackBarPage.customSnackbar.isHidden()); }; - - snackbarSection.durationInput.setValue(String.valueOf(DURATION)); - snackbarSection.customSnackbarOpenButton.click(); - - //duration(DURATION, 1000, action); + snackBarPage.durationInput.setValue(String.valueOf(DURATION)); + snackBarPage.customSnackbarOpenButton.click(); } -} +} \ No newline at end of file diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java index 2f2d0da173..9e641d0ed3 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java @@ -11,19 +11,21 @@ public class SnackbarAssert extends UIAssert { @JDIAction(value = "Assert that '{name}' has message '{0}'", isAssert = true) public SnackbarAssert message(String expected) { - jdiAssert(element().getMessageText(), Matchers.is(expected)); + jdiAssert(element().messageText(), Matchers.containsString(expected)); return this; } - @JDIAction(value = "Assert that '{name}' has no action", isAssert = true) - public SnackbarAssert action() { - jdiAssert(element().isActionDisplayed(), Matchers.is(false), "ERROR MESSAGE IS REQUIRED"); + @JDIAction(value = "Assert that '{name}' has action icon", isAssert = true) + public SnackbarAssert hasAction() { + jdiAssert(element().actionIcon() + .isExist(), Matchers.is(true), "Action doesn't exist in snackbar"); return this; } - @JDIAction(value = "Assert that '{name}' has action {0}", isAssert = true) - public SnackbarAssert action(String expected) { - jdiAssert(element().getActionText(), Matchers.is(expected)); + @JDIAction(value = "Assert that '{name}' has no action icon", isAssert = true) + public SnackbarAssert hasNoAction() { + jdiAssert(element().actionIcon() + .isNotExist(), Matchers.is(true), "Action exists in snackbar"); return this; } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java index c72973dfb0..570d4623fe 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java @@ -1,6 +1,8 @@ package com.epam.jdi.light.angular.elements.complex; import com.epam.jdi.light.angular.asserts.SnackbarAssert; +import com.epam.jdi.light.angular.elements.enums.Position; +import com.epam.jdi.light.angular.elements.interfaces.HasPosition; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; import com.epam.jdi.light.elements.common.UIElement; @@ -9,36 +11,59 @@ * To see an example of Snackbar web element please visit https://material.angular.io/components/snack-bar/overview. */ -public class Snackbar extends UIBaseElement { - protected UIElement message; - protected String messageLocator = "./span"; - +public class Snackbar extends UIBaseElement implements HasPosition { + @Deprecated + private UIElement message; + @Deprecated protected UIElement action; - protected String actionLocator = ".//button"; + private String messageLocator = ".mat-mdc-snack-bar-label .mdc-snackbar__label"; + private String actionLocator = ".//button"; + @Deprecated public Snackbar() { message = new UIElement(); - message.core().setLocator(messageLocator); + message.core() + .setLocator(messageLocator); action = new UIElement(); - action.core().setLocator(actionLocator); + action.core() + .setLocator(actionLocator); } + @Deprecated @JDIAction("Get '{name}' message") public String getMessageText() { return message.getValue(); } + @Deprecated @JDIAction("Get '{name}' action") public String getActionText() { return action.getValue(); } + @JDIAction("Get '{name}' message") + public String messageText() { + return message.getValue(); + } + + @JDIAction("Get '{name}' action") + public String actionText() { + return action.getValue(); + } + + @Deprecated @JDIAction("Click '{name}' action") public void clickAction() { action.click(); } + @JDIAction("Click '{name}' action") + public UIElement actionIcon() { + return this.action; + } + + @Deprecated @JDIAction("Is '{name}' action displayed") public boolean isActionDisplayed() { return action.isDisplayed(); @@ -48,4 +73,19 @@ public boolean isActionDisplayed() { public SnackbarAssert is() { return new SnackbarAssert().set(this); } + + @Override + public Position position() { + return null; + } + + @Override + public Position getPositionFromClass(final UIElement element, final String className) { + return HasPosition.super.getPositionFromClass(element, className); + } + + @Override + public Position getPositionFromAttribute(final String attributeValue) { + return HasPosition.super.getPositionFromAttribute(attributeValue); + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java new file mode 100644 index 0000000000..b8d392a5cd --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -0,0 +1,82 @@ +package com.epam.jdi.light.angular.elements.enums; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +import static com.epam.jdi.light.common.Exceptions.runtimeException; + +/** + * Contains named constants representing element positions. + * Each constant includes information about its string representation. + */ +public enum Position { + TOP("top"), + BOTTOM("bottom"), + LEFT("left"), + RIGHT("right"), + END("end"), + START("start"), + TOP_RIGHT("topRight"), + TOP_LEFT("topLeft"), + TOP_CENTER("topCenter"), + BOTTOM_CENTER("bottomCenter"), + BOTTOM_RIGHT("bottomRight"), + BOTTOM_LEFT("bottomLeft"), + STATIC("Static"); + + private final String value; + + Position(String value) { + this.value = value.toLowerCase(); + } + + /** + * Gets {@link Position} full named constant from the given string. + * + * @param text String value for position + * @return position as {@link Position} + * @throws RuntimeException if no appropriate constant found for given value + */ + public static Position fromFullString(String text) { + if (StringUtils.isBlank(text)) { + throw runtimeException(String.format("%s: input string can't be empty", Position.class.getName())); + } + return Arrays.stream(Position.values()) + .filter(p -> StringUtils.containsAnyIgnoreCase(text, p.toString())) + .max(Comparator.comparing(p -> p.toString().length())) + .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", Position.class.getName(), text))); + } + + public static Position fromClasses(List classes, String stylePrefix, String stylePostfix) { + if (classes == null || classes.isEmpty() || StringUtils.isBlank(stylePrefix)) { + throw runtimeException(String.format("%s: input string can't be empty", + Position.class.getName())); + } + String positionClass = classes.stream() + .filter(c -> StringUtils.containsAnyIgnoreCase(c, stylePrefix)) + .map(c -> c.replaceFirst(stylePrefix, "").replace(stylePostfix, "")) + .findFirst().orElse(""); + if (StringUtils.isBlank(positionClass)) { + throw runtimeException(String.format("%s: input string can't be empty", + Position.class.getName())); + } + return Arrays.stream(Position.values()) + .filter(p -> StringUtils.equalsIgnoreCase(positionClass, p.toString())) + .findAny() + .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", + Position.class.getName(), positionClass))); + } + + /** + * Gets string representation of element position in CamelCase (e.g. "bottom", "bottomLeft"). + * + * @return element position as {@link String} + */ + @Override + public String toString() { + return value; + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasPosition.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasPosition.java new file mode 100644 index 0000000000..0467334822 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasPosition.java @@ -0,0 +1,35 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.angular.elements.enums.Position; +import com.epam.jdi.light.elements.common.UIElement; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; +import org.apache.commons.lang3.StringUtils; + +public interface HasPosition extends ICoreElement { + + Position position(); + + /** + * Gets {@link Position} named constant from the given class name. + * + * @param className String class name to find position + * @param element UIElement to check + * @return position as {@link Position} + */ + default Position getPositionFromClass(UIElement element, String className) { + return Position.fromFullString(element.classes().stream() + .filter(c -> StringUtils.startsWith(c, className)) + .map(c -> c.replace(className, "")) + .findFirst().orElse("")); + } + + /** + * Gets {@link Position} named constant from the given attribute value. + * + * @param attributeValue String attribute value to find position + * @return position as {@link Position} + */ + default Position getPositionFromAttribute(String attributeValue) { + return Position.fromFullString(core().attr(attributeValue)); + } +} From 3f4039b2e5e9147fc67988f553bbdca0f99f9482 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Thu, 13 Jun 2024 04:07:27 +0300 Subject: [PATCH 02/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../tests/elements/complex/SnackbarTests.java | 122 +++++++++++++----- 1 file changed, 91 insertions(+), 31 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index 51ec1397c6..219b156277 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -1,13 +1,35 @@ package io.github.epam.angular.tests.elements.complex; -import com.jdiai.tools.func.JAction; +import com.epam.jdi.light.angular.elements.enums.Position; import io.github.epam.TestsInit; import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.END_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.END_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.START_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.START_TOP; +import static com.epam.jdi.light.elements.base.Conditions.hidden; +import static com.epam.jdi.light.elements.base.Conditions.visible; import static com.jdiai.tools.Timer.waitCondition; import static io.github.com.StaticSite.snackBarPage; - +import static io.github.com.pages.SnackBarPage.basicSnackbarActionInput; +import static io.github.com.pages.SnackBarPage.basicSnackbarMessageInput; +import static io.github.com.pages.SnackBarPage.customSnackbar; +import static io.github.com.pages.SnackBarPage.durationInput; +import static io.github.com.pages.SnackBarPage.horizontalPositionDropdown; +import static io.github.com.pages.SnackBarPage.showBasicSnackbarButton; +import static io.github.com.pages.SnackBarPage.showCustomSnackbarButton; +import static io.github.com.pages.SnackBarPage.showPositionSnackbarButton; +import static io.github.com.pages.SnackBarPage.snackbar; +import static io.github.com.pages.SnackBarPage.verticalPositionDropdown; public class SnackbarTests extends TestsInit { @@ -22,45 +44,83 @@ public void before() { } @Test - public void checkBasicSnackbarTest() { - snackBarPage.messageInput.setValue(MESSAGE); - snackBarPage.actionInput.setValue(ACTION); - snackBarPage.openButton.click(); - - snackBarPage.basicSnackbar.is().displayed(); - snackBarPage.basicSnackbar.has().message(MESSAGE); - snackBarPage.basicSnackbar.actionIcon().has().text(ACTION); + public void basicSnackbarTest() { + basicSnackbarMessageInput.setValue(MESSAGE); + basicSnackbarActionInput.setValue(ACTION); + showBasicSnackbarButton.click(); + + snackbar.is() + .displayed(); + snackbar.has() + .message(MESSAGE); + snackbar.action() + .has() + .text(ACTION); } @Test - public void checkSnackbarClickActionDismissTest() { - snackBarPage.messageInput.setValue(MESSAGE); - snackBarPage.actionInput.setValue(ACTION); - snackBarPage.openButton.click(); + public void snackbarDismissAfterClickActionTest() { + basicSnackbarMessageInput.setValue(MESSAGE); + basicSnackbarActionInput.setValue(ACTION); + showBasicSnackbarButton.click(); - snackBarPage.basicSnackbar.actionIcon().click(); - snackBarPage.basicSnackbar.is().disappear(); + snackbar.action() + .click(); + snackbar.is() + .disappear(); } @Test - public void checkSnackbarWithNoActionTest() { - snackBarPage.messageInput.setValue(MESSAGE); - snackBarPage.actionInput.setValue(""); - snackBarPage.openButton.click(); + public void snackbarWithNoActionTest() { + basicSnackbarMessageInput.setValue(MESSAGE); + basicSnackbarActionInput.setValue(""); + showBasicSnackbarButton.click(); - snackBarPage.basicSnackbar.has().shown(); - snackBarPage.basicSnackbar.actionIcon().has().notAppear(); + snackbar.has() + .shown(); + snackbar.action() + .has() + .notAppear(); } @Test - public void checkSnackbarDurationTest() { - final int DURATION = 5; - - JAction action = () -> { - snackBarPage.customSnackbar.base().timer().wait(() -> snackBarPage.customSnackbar.isDisplayed()); - snackBarPage.customSnackbar.base().timer().wait(() -> snackBarPage.customSnackbar.isHidden()); - }; - snackBarPage.durationInput.setValue(String.valueOf(DURATION)); - snackBarPage.customSnackbarOpenButton.click(); + public void snackbarDurationTest() { + final int DURATION = 3; + + durationInput.setValue(String.valueOf(DURATION)); + showCustomSnackbarButton.click(); + + customSnackbar.shouldBe(visible); + customSnackbar.is() + .notHidden(DURATION); + customSnackbar.shouldBe(hidden); + } + + @Test(dataProvider = "positionProvider") + public void snackbarPositionTest(String horizontal, String vertical, Position position) { + horizontalPositionDropdown.select(horizontal); + verticalPositionDropdown.select(vertical); + showPositionSnackbarButton.click(); + snackbar.has() + .shown() + .and() + .has() + .position(position); + } + + @DataProvider(name = "positionProvider") + public Object[][] providePositions() { + return new Object[][]{ + {"Start", "Top", START_TOP}, + {"Center", "Top", CENTER_TOP}, + {"End", "Top", END_TOP}, + {"Left", "Top", LEFT_TOP}, + {"Right", "Top", RIGHT_TOP}, + + {"Start", "Bottom", START_BOTTOM}, + {"Center", "Bottom", CENTER_BOTTOM}, + {"End", "Bottom", END_BOTTOM}, + {"Left", "Bottom", LEFT_BOTTOM}, + {"Right", "Bottom", RIGHT_BOTTOM}}; } } \ No newline at end of file From dfd98aa39cb81d7736878e5e975c55116d7f71f5 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Thu, 13 Jun 2024 04:08:07 +0300 Subject: [PATCH 03/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../io/github/com/pages/SnackBarPage.java | 31 +++++--- .../light/angular/asserts/PositionAssert.java | 24 ++++++ .../light/angular/asserts/SnackbarAssert.java | 35 +++++++-- .../angular/elements/complex/Snackbar.java | 74 ++++--------------- .../angular/elements/enums/Position.java | 55 ++++++++------ 5 files changed, 119 insertions(+), 100 deletions(-) create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/PositionAssert.java diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java index a743f30d60..179221624b 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SnackBarPage.java @@ -1,30 +1,39 @@ package io.github.com.pages; import com.epam.jdi.light.angular.elements.complex.Snackbar; +import com.epam.jdi.light.elements.complex.dropdown.Dropdown; +import com.epam.jdi.light.elements.pageobjects.annotations.locators.JDropdown; import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; import com.epam.jdi.light.ui.html.elements.common.Button; import com.epam.jdi.light.ui.html.elements.common.TextField; public class SnackBarPage extends AngularPage { + @UI("#snack-bar-custom-component-input") + public static TextField durationInput; + + @UI("#snack-bar-custom-component-button") + public static Button showCustomSnackbarButton; + + @UI("#snack-bar-custom-component") + public static Snackbar customSnackbar; @UI("#snack-bar-message-input") - public TextField messageInput; + public static TextField basicSnackbarMessageInput; @UI("#snack-bar-action-input") - public TextField actionInput; + public static TextField basicSnackbarActionInput; @UI("#snack-bar-open-button") - public Button openButton; - + public static Button showBasicSnackbarButton; @UI("//simple-snack-bar") - public Snackbar basicSnackbar; + public static Snackbar snackbar; - @UI("#snack-bar-custom-component-input") - public TextField durationInput; + @JDropdown(root = "mat-form-field.mat-mdc-form-field-type-mat-select:has(#snack-bar-position-horizontal-select)", value = "span.mat-mdc-select-min-line", list = "//ancestor::body//mat-option") + public static Dropdown horizontalPositionDropdown; - @UI("#snack-bar-custom-component-button") - public Button customSnackbarOpenButton; + @JDropdown(root = "mat-form-field.mat-mdc-form-field-type-mat-select:has(#snack-bar-position-vertival-select)", value = "span.mat-mdc-select-min-line", list = "//ancestor::body//mat-option") + public static Dropdown verticalPositionDropdown; - @UI("#snack-bar-custom-component") - public Snackbar customSnackbar; + @UI("#snack-bar-position-open-button") + public static Button showPositionSnackbarButton; } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/PositionAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/PositionAssert.java new file mode 100644 index 0000000000..adda7368b4 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/PositionAssert.java @@ -0,0 +1,24 @@ +package com.epam.jdi.light.angular.asserts; + +import com.epam.jdi.light.angular.elements.enums.Position; +import com.epam.jdi.light.angular.elements.interfaces.HasPosition; +import com.epam.jdi.light.asserts.generic.UIAssert; +import com.epam.jdi.light.common.JDIAction; +import org.hamcrest.Matchers; + +import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; + +public abstract class PositionAssert, E extends HasPosition> extends UIAssert { + + @JDIAction(value = "Assert that '{name}' has position '{0}'", isAssert = true) + public A position(String position) { + jdiAssert(element().position(), Matchers.is(Position.fromFullString(position))); + return (A) this; + } + + @JDIAction(value = "Assert that '{name}' has position '{0}'", isAssert = true) + public A position(Position position) { + jdiAssert(element().position(), Matchers.is(position)); + return (A) this; + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java index 9e641d0ed3..c9df06655c 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SnackbarAssert.java @@ -1,31 +1,52 @@ package com.epam.jdi.light.angular.asserts; import com.epam.jdi.light.angular.elements.complex.Snackbar; -import com.epam.jdi.light.asserts.generic.UIAssert; import com.epam.jdi.light.common.JDIAction; +import com.jdiai.tools.Timer; +import com.jdiai.tools.func.JAction; import org.hamcrest.Matchers; import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; -public class SnackbarAssert extends UIAssert { +public class SnackbarAssert extends PositionAssert { @JDIAction(value = "Assert that '{name}' has message '{0}'", isAssert = true) public SnackbarAssert message(String expected) { - jdiAssert(element().messageText(), Matchers.containsString(expected)); + jdiAssert(element().message() + .getText(), Matchers.containsString(expected)); return this; } - @JDIAction(value = "Assert that '{name}' has action icon", isAssert = true) + @JDIAction(value = "Assert that '{name}' has action '{0}'", isAssert = true) + public SnackbarAssert action(String expected) { + jdiAssert(element().action() + .getText(), Matchers.containsString(expected)); + return this; + } + + @JDIAction(value = "Assert that '{name}' has action button", isAssert = true) public SnackbarAssert hasAction() { - jdiAssert(element().actionIcon() + jdiAssert(element().action() .isExist(), Matchers.is(true), "Action doesn't exist in snackbar"); return this; } - @JDIAction(value = "Assert that '{name}' has no action icon", isAssert = true) + @JDIAction(value = "Assert that '{name}' has no action button", isAssert = true) public SnackbarAssert hasNoAction() { - jdiAssert(element().actionIcon() + jdiAssert(element().action() .isNotExist(), Matchers.is(true), "Action exists in snackbar"); return this; } + + @JDIAction(value = "Assert that '{name}' is visible during '{0}' seconds", isAssert = true) + public SnackbarAssert notHidden(int timeoutSec) { + JAction action = () -> { + element().base() + .timer() + .wait(() -> element().isDisplayed()); + }; + boolean result = new Timer(timeoutSec * 1000L).wait(action); + jdiAssert(result ? "displayed" : "hidden", Matchers.is("displayed")); + return this; + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java index 570d4623fe..261adbcb0a 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java @@ -12,80 +12,34 @@ */ public class Snackbar extends UIBaseElement implements HasPosition { - @Deprecated - private UIElement message; - @Deprecated - protected UIElement action; - private String messageLocator = ".mat-mdc-snack-bar-label .mdc-snackbar__label"; - private String actionLocator = ".//button"; + private static final String MESSAGE_LOCATOR = ".mat-mdc-snack-bar-label .mdc-snackbar__label"; + private static final String ACTION_LOCATOR = ".//button"; + private static final String OVERLAY_LOCATOR = "//ancestor::div[@class='cdk-global-overlay-wrapper']"; - @Deprecated - public Snackbar() { - message = new UIElement(); - message.core() - .setLocator(messageLocator); - - action = new UIElement(); - action.core() - .setLocator(actionLocator); - } - - @Deprecated - @JDIAction("Get '{name}' message") - public String getMessageText() { - return message.getValue(); - } - - @Deprecated @JDIAction("Get '{name}' action") - public String getActionText() { - return action.getValue(); + public UIElement action() { + return core().find(ACTION_LOCATOR); } @JDIAction("Get '{name}' message") - public String messageText() { - return message.getValue(); - } - - @JDIAction("Get '{name}' action") - public String actionText() { - return action.getValue(); - } - - @Deprecated - @JDIAction("Click '{name}' action") - public void clickAction() { - action.click(); - } - - @JDIAction("Click '{name}' action") - public UIElement actionIcon() { - return this.action; - } - - @Deprecated - @JDIAction("Is '{name}' action displayed") - public boolean isActionDisplayed() { - return action.isDisplayed(); - } - - @Override - public SnackbarAssert is() { - return new SnackbarAssert().set(this); + public UIElement message() { + return core().find(MESSAGE_LOCATOR); } @Override + @JDIAction("Get '{name}' position") public Position position() { - return null; + return getPositionFromAttribute("style"); } @Override - public Position getPositionFromClass(final UIElement element, final String className) { - return HasPosition.super.getPositionFromClass(element, className); + public Position getPositionFromAttribute(String attributeValue) { + return Position.fromFullString(core().find(OVERLAY_LOCATOR) + .attr(attributeValue)); } @Override - public Position getPositionFromAttribute(final String attributeValue) { - return HasPosition.super.getPositionFromAttribute(attributeValue); + public SnackbarAssert is() { + return new SnackbarAssert().set(this); } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java index b8d392a5cd..71e012c2f7 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -13,19 +13,30 @@ * Each constant includes information about its string representation. */ public enum Position { - TOP("top"), - BOTTOM("bottom"), - LEFT("left"), - RIGHT("right"), - END("end"), - START("start"), - TOP_RIGHT("topRight"), - TOP_LEFT("topLeft"), - TOP_CENTER("topCenter"), - BOTTOM_CENTER("bottomCenter"), - BOTTOM_RIGHT("bottomRight"), - BOTTOM_LEFT("bottomLeft"), - STATIC("Static"); + TOP("align-items: flex-start"), + BOTTOM("align-items: flex-end"), + + START("justify-content: flex-start"), + CENTER("justify-content: center"), + END("justify-content: flex-end"), + LEFT("justify-content: flex-start"), + RIGHT("justify-content: flex-end"), + + START_BOTTOM("justify-content: flex-start; align-items: flex-end;"), + CENTER_BOTTOM("justify-content: center; align-items: flex-end;"), + END_BOTTOM("justify-content: flex-end; align-items: flex-end;"), + LEFT_BOTTOM("justify-content: flex-start; align-items: flex-end;"), + RIGHT_BOTTOM("justify-content: flex-end; align-items: flex-end;"), + + START_TOP("justify-content: flex-start; align-items: flex-start;"), + + CENTER_TOP("justify-content: center; align-items: flex-start;"), + + END_TOP("justify-content: flex-end; align-items: flex-start;"), + + LEFT_TOP("justify-content: flex-start; align-items: flex-start;"), + + RIGHT_TOP("justify-content: flex-end; align-items: flex-start;"); private final String value; @@ -46,28 +57,28 @@ public static Position fromFullString(String text) { } return Arrays.stream(Position.values()) .filter(p -> StringUtils.containsAnyIgnoreCase(text, p.toString())) - .max(Comparator.comparing(p -> p.toString().length())) + .max(Comparator.comparing(p -> p.toString() + .length())) .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", Position.class.getName(), text))); } public static Position fromClasses(List classes, String stylePrefix, String stylePostfix) { if (classes == null || classes.isEmpty() || StringUtils.isBlank(stylePrefix)) { - throw runtimeException(String.format("%s: input string can't be empty", - Position.class.getName())); + throw runtimeException(String.format("%s: input string can't be empty", Position.class.getName())); } String positionClass = classes.stream() .filter(c -> StringUtils.containsAnyIgnoreCase(c, stylePrefix)) - .map(c -> c.replaceFirst(stylePrefix, "").replace(stylePostfix, "")) - .findFirst().orElse(""); + .map(c -> c.replaceFirst(stylePrefix, "") + .replace(stylePostfix, "")) + .findFirst() + .orElse(""); if (StringUtils.isBlank(positionClass)) { - throw runtimeException(String.format("%s: input string can't be empty", - Position.class.getName())); + throw runtimeException(String.format("%s: input string can't be empty", Position.class.getName())); } return Arrays.stream(Position.values()) .filter(p -> StringUtils.equalsIgnoreCase(positionClass, p.toString())) .findAny() - .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", - Position.class.getName(), positionClass))); + .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", Position.class.getName(), positionClass))); } /** From bd93ebaad681ef746d8dee278a395520f0f25c09 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Thu, 13 Jun 2024 04:12:39 +0300 Subject: [PATCH 04/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../com/epam/jdi/light/angular/elements/enums/Position.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java index 71e012c2f7..a7666b1ef6 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -29,13 +29,9 @@ public enum Position { RIGHT_BOTTOM("justify-content: flex-end; align-items: flex-end;"), START_TOP("justify-content: flex-start; align-items: flex-start;"), - CENTER_TOP("justify-content: center; align-items: flex-start;"), - END_TOP("justify-content: flex-end; align-items: flex-start;"), - LEFT_TOP("justify-content: flex-start; align-items: flex-start;"), - RIGHT_TOP("justify-content: flex-end; align-items: flex-start;"); private final String value; From bed3032245fdf88c9aa21a30e539a644f596b2c3 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Thu, 13 Jun 2024 14:49:08 +0300 Subject: [PATCH 05/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../tests/elements/complex/SnackbarTests.java | 12 ++++-------- .../jdi/light/angular/elements/enums/Position.java | 4 ---- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index 219b156277..5e1f83bbe9 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -8,14 +8,10 @@ import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_BOTTOM; import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_TOP; -import static com.epam.jdi.light.angular.elements.enums.Position.END_BOTTOM; -import static com.epam.jdi.light.angular.elements.enums.Position.END_TOP; import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_BOTTOM; import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_TOP; import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_BOTTOM; import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_TOP; -import static com.epam.jdi.light.angular.elements.enums.Position.START_BOTTOM; -import static com.epam.jdi.light.angular.elements.enums.Position.START_TOP; import static com.epam.jdi.light.elements.base.Conditions.hidden; import static com.epam.jdi.light.elements.base.Conditions.visible; import static com.jdiai.tools.Timer.waitCondition; @@ -111,15 +107,15 @@ public void snackbarPositionTest(String horizontal, String vertical, Position po @DataProvider(name = "positionProvider") public Object[][] providePositions() { return new Object[][]{ - {"Start", "Top", START_TOP}, + {"Start", "Top", LEFT_TOP}, {"Center", "Top", CENTER_TOP}, - {"End", "Top", END_TOP}, + {"End", "Top", RIGHT_TOP}, {"Left", "Top", LEFT_TOP}, {"Right", "Top", RIGHT_TOP}, - {"Start", "Bottom", START_BOTTOM}, + {"Start", "Bottom", LEFT_BOTTOM}, {"Center", "Bottom", CENTER_BOTTOM}, - {"End", "Bottom", END_BOTTOM}, + {"End", "Bottom", RIGHT_BOTTOM}, {"Left", "Bottom", LEFT_BOTTOM}, {"Right", "Bottom", RIGHT_BOTTOM}}; } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java index a7666b1ef6..3e519398b5 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -22,15 +22,11 @@ public enum Position { LEFT("justify-content: flex-start"), RIGHT("justify-content: flex-end"), - START_BOTTOM("justify-content: flex-start; align-items: flex-end;"), CENTER_BOTTOM("justify-content: center; align-items: flex-end;"), - END_BOTTOM("justify-content: flex-end; align-items: flex-end;"), LEFT_BOTTOM("justify-content: flex-start; align-items: flex-end;"), RIGHT_BOTTOM("justify-content: flex-end; align-items: flex-end;"), - START_TOP("justify-content: flex-start; align-items: flex-start;"), CENTER_TOP("justify-content: center; align-items: flex-start;"), - END_TOP("justify-content: flex-end; align-items: flex-start;"), LEFT_TOP("justify-content: flex-start; align-items: flex-start;"), RIGHT_TOP("justify-content: flex-end; align-items: flex-start;"); From 81d4a9d541980218369cc4dddb73346fc37c7839 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Thu, 13 Jun 2024 15:37:43 +0300 Subject: [PATCH 06/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../com/epam/jdi/light/angular/elements/enums/Position.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java index 3e519398b5..d412becaed 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -16,9 +16,7 @@ public enum Position { TOP("align-items: flex-start"), BOTTOM("align-items: flex-end"), - START("justify-content: flex-start"), CENTER("justify-content: center"), - END("justify-content: flex-end"), LEFT("justify-content: flex-start"), RIGHT("justify-content: flex-end"), From 30dae943bcba6d37f630eee6ce268607767b58d2 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Fri, 21 Jun 2024 18:16:24 +0300 Subject: [PATCH 07/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../tests/elements/complex/SnackbarTests.java | 40 +++++++++---------- .../angular/elements/complex/Snackbar.java | 5 ++- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index 5e1f83bbe9..b1da863f6a 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -6,12 +6,11 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_BOTTOM; -import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_TOP; -import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_BOTTOM; -import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_TOP; -import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_BOTTOM; -import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.CENTER; +import static com.epam.jdi.light.angular.elements.enums.Position.LEFT; +import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT; +import static com.epam.jdi.light.angular.elements.enums.Position.TOP; import static com.epam.jdi.light.elements.base.Conditions.hidden; import static com.epam.jdi.light.elements.base.Conditions.visible; import static com.jdiai.tools.Timer.waitCondition; @@ -93,30 +92,29 @@ public void snackbarDurationTest() { } @Test(dataProvider = "positionProvider") - public void snackbarPositionTest(String horizontal, String vertical, Position position) { + public void snackbarPositionTest(String horizontal,Position horizontalPosition, String vertical, Position verticalPosition) { horizontalPositionDropdown.select(horizontal); verticalPositionDropdown.select(vertical); showPositionSnackbarButton.click(); snackbar.has() .shown() - .and() - .has() - .position(position); + .and().has().position(verticalPosition) + .and().has().position(horizontalPosition); } @DataProvider(name = "positionProvider") public Object[][] providePositions() { return new Object[][]{ - {"Start", "Top", LEFT_TOP}, - {"Center", "Top", CENTER_TOP}, - {"End", "Top", RIGHT_TOP}, - {"Left", "Top", LEFT_TOP}, - {"Right", "Top", RIGHT_TOP}, - - {"Start", "Bottom", LEFT_BOTTOM}, - {"Center", "Bottom", CENTER_BOTTOM}, - {"End", "Bottom", RIGHT_BOTTOM}, - {"Left", "Bottom", LEFT_BOTTOM}, - {"Right", "Bottom", RIGHT_BOTTOM}}; + {"Start",LEFT, "Top", TOP}, + {"Center", CENTER, "Top", TOP}, + {"End", RIGHT, "Top", TOP}, + {"Left",LEFT, "Top", TOP}, + {"Right",RIGHT, "Top", TOP}, + + {"Start",LEFT, "Bottom", BOTTOM}, + {"Center", CENTER, "Bottom", BOTTOM}, + {"End", RIGHT,"Bottom", BOTTOM}, + {"Left",LEFT, "Bottom", BOTTOM}, + {"Right",RIGHT, "Bottom", BOTTOM}}; } } \ No newline at end of file diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java index 261adbcb0a..3877cefb0d 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Snackbar.java @@ -1,6 +1,7 @@ package com.epam.jdi.light.angular.elements.complex; import com.epam.jdi.light.angular.asserts.SnackbarAssert; +import com.epam.jdi.light.angular.elements.common.Button; import com.epam.jdi.light.angular.elements.enums.Position; import com.epam.jdi.light.angular.elements.interfaces.HasPosition; import com.epam.jdi.light.common.JDIAction; @@ -17,8 +18,8 @@ public class Snackbar extends UIBaseElement implements HasPositi private static final String OVERLAY_LOCATOR = "//ancestor::div[@class='cdk-global-overlay-wrapper']"; @JDIAction("Get '{name}' action") - public UIElement action() { - return core().find(ACTION_LOCATOR); + public Button action() { + return new Button().setCore(Button.class, core().find(ACTION_LOCATOR)); } @JDIAction("Get '{name}' message") From a361338ade660e6af5ce938283414d9cec337b57 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Fri, 21 Jun 2024 18:22:18 +0300 Subject: [PATCH 08/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../tests/elements/complex/SnackbarTests.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index b1da863f6a..52e3e3fa4a 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -6,11 +6,12 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import static com.epam.jdi.light.angular.elements.enums.Position.BOTTOM; -import static com.epam.jdi.light.angular.elements.enums.Position.CENTER; -import static com.epam.jdi.light.angular.elements.enums.Position.LEFT; -import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT; -import static com.epam.jdi.light.angular.elements.enums.Position.TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.CENTER_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.LEFT_TOP; +import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_BOTTOM; +import static com.epam.jdi.light.angular.elements.enums.Position.RIGHT_TOP; import static com.epam.jdi.light.elements.base.Conditions.hidden; import static com.epam.jdi.light.elements.base.Conditions.visible; import static com.jdiai.tools.Timer.waitCondition; @@ -105,16 +106,16 @@ public void snackbarPositionTest(String horizontal,Position horizontalPosition, @DataProvider(name = "positionProvider") public Object[][] providePositions() { return new Object[][]{ - {"Start",LEFT, "Top", TOP}, - {"Center", CENTER, "Top", TOP}, - {"End", RIGHT, "Top", TOP}, - {"Left",LEFT, "Top", TOP}, - {"Right",RIGHT, "Top", TOP}, - - {"Start",LEFT, "Bottom", BOTTOM}, - {"Center", CENTER, "Bottom", BOTTOM}, - {"End", RIGHT,"Bottom", BOTTOM}, - {"Left",LEFT, "Bottom", BOTTOM}, - {"Right",RIGHT, "Bottom", BOTTOM}}; + {"Start", "Top", LEFT_TOP}, + {"Center", "Top", CENTER_TOP}, + {"End", "Top", RIGHT_TOP}, + {"Left", "Top", LEFT_TOP}, + {"Right", "Top", RIGHT_TOP}, + + {"Start", "Bottom", LEFT_BOTTOM}, + {"Center", "Bottom", CENTER_BOTTOM}, + {"End", "Bottom", RIGHT_BOTTOM}, + {"Left", "Bottom", LEFT_BOTTOM}, + {"Right", "Bottom", RIGHT_BOTTOM}}; } } \ No newline at end of file From f8883aa79641c8d56d5d5ef11f23a5eb6d9f6afe Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Fri, 21 Jun 2024 18:30:18 +0300 Subject: [PATCH 09/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../epam/angular/tests/elements/complex/SnackbarTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index 52e3e3fa4a..e49c0a1467 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -111,7 +111,6 @@ public Object[][] providePositions() { {"End", "Top", RIGHT_TOP}, {"Left", "Top", LEFT_TOP}, {"Right", "Top", RIGHT_TOP}, - {"Start", "Bottom", LEFT_BOTTOM}, {"Center", "Bottom", CENTER_BOTTOM}, {"End", "Bottom", RIGHT_BOTTOM}, From bef6a08654f7d1e55578e3579c77661808092a1e Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Fri, 21 Jun 2024 18:34:54 +0300 Subject: [PATCH 10/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../epam/angular/tests/elements/complex/SnackbarTests.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java index e49c0a1467..6c3db446f7 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SnackbarTests.java @@ -93,14 +93,15 @@ public void snackbarDurationTest() { } @Test(dataProvider = "positionProvider") - public void snackbarPositionTest(String horizontal,Position horizontalPosition, String vertical, Position verticalPosition) { + public void snackbarPositionTest(String horizontal, String vertical, Position position) { horizontalPositionDropdown.select(horizontal); verticalPositionDropdown.select(vertical); showPositionSnackbarButton.click(); snackbar.has() .shown() - .and().has().position(verticalPosition) - .and().has().position(horizontalPosition); + .and() + .has() + .position(position); } @DataProvider(name = "positionProvider") From c8c580ab79bd67c06213bcd83908baec1583caa6 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Fri, 28 Jun 2024 19:35:03 +0300 Subject: [PATCH 11/12] - update position enum --- .../angular/elements/enums/Position.java | 100 ++++++++---------- 1 file changed, 45 insertions(+), 55 deletions(-) diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java index d412becaed..158fb4fc6d 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -1,83 +1,73 @@ package com.epam.jdi.light.angular.elements.enums; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; - import org.apache.commons.lang3.StringUtils; import static com.epam.jdi.light.common.Exceptions.runtimeException; +import static org.apache.commons.lang3.StringUtils.containsIgnoreCase; /** * Contains named constants representing element positions. * Each constant includes information about its string representation. */ public enum Position { - TOP("align-items: flex-start"), - BOTTOM("align-items: flex-end"), + TOP(null, "align-items: flex-start;"), + BOTTOM(null, "align-items: flex-end;"), - CENTER("justify-content: center"), - LEFT("justify-content: flex-start"), - RIGHT("justify-content: flex-end"), + CENTER("justify-content: center;", null), + LEFT("justify-content: flex-start;", null), + RIGHT("justify-content: flex-end;", null), - CENTER_BOTTOM("justify-content: center; align-items: flex-end;"), - LEFT_BOTTOM("justify-content: flex-start; align-items: flex-end;"), - RIGHT_BOTTOM("justify-content: flex-end; align-items: flex-end;"), + CENTER_BOTTOM("justify-content: center;", "align-items: flex-end;"), + LEFT_BOTTOM("justify-content: flex-start;", "align-items: flex-end;"), + RIGHT_BOTTOM("justify-content: flex-end;", "align-items: flex-end;"), + CENTER_TOP("justify-content: center;", "align-items: flex-start;"), + LEFT_TOP("justify-content: flex-start;", "align-items: flex-start;"), + RIGHT_TOP("justify-content: flex-end;", "align-items: flex-start;"); + private static String justifyContent = "justify-content"; + private static String alignItems = "align-items"; + private final String horizontalPosition; + private final String verticalPosition; - CENTER_TOP("justify-content: center; align-items: flex-start;"), - LEFT_TOP("justify-content: flex-start; align-items: flex-start;"), - RIGHT_TOP("justify-content: flex-end; align-items: flex-start;"); + Position(String horizontalPosition, String verticalPosition) { + this.horizontalPosition = horizontalPosition; + this.verticalPosition = verticalPosition; + } - private final String value; + public String getHorizontalPosition() { + return horizontalPosition; + } - Position(String value) { - this.value = value.toLowerCase(); + public String getVerticalPosition() { + return verticalPosition; } - /** - * Gets {@link Position} full named constant from the given string. - * - * @param text String value for position - * @return position as {@link Position} - * @throws RuntimeException if no appropriate constant found for given value - */ public static Position fromFullString(String text) { if (StringUtils.isBlank(text)) { throw runtimeException(String.format("%s: input string can't be empty", Position.class.getName())); } - return Arrays.stream(Position.values()) - .filter(p -> StringUtils.containsAnyIgnoreCase(text, p.toString())) - .max(Comparator.comparing(p -> p.toString() - .length())) - .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", Position.class.getName(), text))); - } - - public static Position fromClasses(List classes, String stylePrefix, String stylePostfix) { - if (classes == null || classes.isEmpty() || StringUtils.isBlank(stylePrefix)) { - throw runtimeException(String.format("%s: input string can't be empty", Position.class.getName())); - } - String positionClass = classes.stream() - .filter(c -> StringUtils.containsAnyIgnoreCase(c, stylePrefix)) - .map(c -> c.replaceFirst(stylePrefix, "") - .replace(stylePostfix, "")) - .findFirst() - .orElse(""); - if (StringUtils.isBlank(positionClass)) { - throw runtimeException(String.format("%s: input string can't be empty", Position.class.getName())); + boolean horizontalPositionMatches = containsIgnoreCase(text, justifyContent); + boolean verticalPositionMatches = containsIgnoreCase(text, alignItems); + for (Position position : Position.values()) { + boolean horizontal; + boolean vertical; + if (horizontalPositionMatches) { + horizontal = containsIgnoreCase(text, position.horizontalPosition); + } else { + horizontal = position.horizontalPosition == null; + } + if (verticalPositionMatches) { + vertical = containsIgnoreCase(text, position.verticalPosition); + } else { + vertical = position.verticalPosition == null; + } + if (horizontal && vertical) { + return position; + } } - return Arrays.stream(Position.values()) - .filter(p -> StringUtils.equalsIgnoreCase(positionClass, p.toString())) - .findAny() - .orElseThrow(() -> runtimeException(String.format("No appropriate %s constant found for value '%s'", Position.class.getName(), positionClass))); + throw runtimeException(String.format("No appropriate %s constant found for value '%s'", Position.class.getName(), text)); } - /** - * Gets string representation of element position in CamelCase (e.g. "bottom", "bottomLeft"). - * - * @return element position as {@link String} - */ - @Override public String toString() { - return value; + return justifyContent + " " + verticalPosition; } } From 551d9622cb08e5d08bb445f77c70209ba5309be6 Mon Sep 17 00:00:00 2001 From: Aleksandr_Vorobev Date: Fri, 28 Jun 2024 19:38:14 +0300 Subject: [PATCH 12/12] - refactoring: Snackbar element - Update test site: Snackbar element --- .../com/epam/jdi/light/angular/elements/enums/Position.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java index 158fb4fc6d..06aac22fa2 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/Position.java @@ -68,6 +68,6 @@ public static Position fromFullString(String text) { } public String toString() { - return justifyContent + " " + verticalPosition; + return horizontalPosition + " " + verticalPosition; } }