From 21d3a78ef5c049d1a609cde1dfe7ac9d746ff44c Mon Sep 17 00:00:00 2001 From: evgen460 Date: Tue, 23 Jan 2024 13:54:43 +0300 Subject: [PATCH 1/4] 4935_Test-refactoring-element-Sidenav2 4935_Test-refactoring-element-Sidenav --- .../main/java/io/github/com/StaticSite.java | 4 + .../java/io/github/com/pages/SideNavPage.java | 92 +++++++++++++ .../tests/elements/complex/SideNavTests.java | 125 +++++++++++++----- 3 files changed, 191 insertions(+), 30 deletions(-) create mode 100644 jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.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..318639d81f 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 @@ -13,6 +13,7 @@ import io.github.com.pages.ProgressBarPage; import io.github.com.pages.ProgressSpinnerPage; import io.github.com.pages.RadioButtonPage; +import io.github.com.pages.SideNavPage; import io.github.com.pages.SlideTogglePage; @JSite("https://jdi-testing.github.io/jdi-light/angular-page/#/") @@ -39,6 +40,9 @@ public class StaticSite { @Url("buttons_toggle") public static ButtonTogglePage buttonTogglePage; + @Url("sidenav") + public static SideNavPage sideNavPage; + @Url("divider") public static DividerPage dividerPage; diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java new file mode 100644 index 0000000000..6db100a956 --- /dev/null +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java @@ -0,0 +1,92 @@ +package io.github.com.pages; + +import com.epam.jdi.light.angular.elements.common.Checkbox; +import com.epam.jdi.light.angular.elements.complex.SideNav; +import com.epam.jdi.light.angular.elements.complex.radiobuttons.RadioGroup; +import com.epam.jdi.light.elements.common.UIElement; +import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; +import com.epam.jdi.light.ui.html.elements.common.Button; +import io.github.com.pages.sections.SideNavSection; + +public class SideNavPage extends NewAngularPage { + + public static SideNav basicSideNav; + public static SideNav basicDrawer; + public static SideNav sidenavBackdropContainer; + public static SideNav implicitMainContent; + public static SideNav openCloseBehavior; + + @UI("#open-close-behavior mat-checkbox") + public static Checkbox sideNavOpened; + + @UI("#open-close-behavior button") + public static Button sideNavToggle; + + public static SideNav configurableMode; + + @UI("#configurable-mode .mat-sidenav button") + public static Button sideToggle; + + @UI("#configurable-mode .mat-sidenav-content button") + public static Button contentToggle; + + @UI("#configurable-mode .mat-sidenav .mat-mdc-radio-group") + public static RadioGroup sideNavRadioGroup; + @UI("#mat-select-position") + public static UIElement sideNavPosition; + + @UI("#mat-select-focus-on-the-first-item") + public static UIElement sideNavFocusSelection; + + @UI("#configurable-mode .mat-sidenav-content .mat-mdc-radio-group") + public static RadioGroup contentRadioGroup; + + public static SideNav customEscapeBackdrop; + + @UI("#custom-escape-backdrop .mat-sidenav button") + public static Button toggleSideNav; + + @UI("#custom-escape-backdrop .mat-sidenav-content button") + public static Button openSideNav; + + public static SideNav autoSizeSideNav; + + @UI("#auto-size-side-nav .mat-drawer-content button") + public static Button toggleAutoNav; + + @UI("#auto-size-side-nav .mat-drawer button") + public static Button toggleExtraText; + + public static SideNav fixedPosition; + + @UI("#fixed-position mat-checkbox") + public static Checkbox fixSideNav; + + @UI("#fixed-position .mat-sidenav-content button") + public static Button toggleFixedSideNav; + + @UI("#fixed-position .mat-sidenav-content mat-form-field input[formcontrolname='top']") + public static UIElement topGap; + + @UI("#fixed-position .mat-sidenav-content mat-form-field input[formcontrolname='bottom']") + public static UIElement bottomGap; + + public static SideNavSection sidenavBackdropDrawer; + + public static SideNav responsiveContent; + + @UI("//*[@id='responsive-content']/preceding-sibling::mat-toolbar/button") + public static Button toolbarToggle; + + @UI("#mat-drawer-open-button") + public static Button backDropToggle; + + @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='First Element']]") + public static Button firstElement; + + @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='First Element'] and contains(@class, 'cdk-focused')]") + public static Button firstElementFocused; + + @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='Second Element']]") + public static Button secondElement; +} diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java index 1790b30a99..8b7eac2f0a 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java @@ -1,20 +1,49 @@ package io.github.epam.angular.tests.elements.complex; +import com.epam.jdi.light.angular.elements.composite.MaterialSelectorContainer; import com.epam.jdi.light.elements.common.UIElement; import io.github.epam.TestsInit; import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Ignore; import org.testng.annotations.Test; import static com.epam.jdi.light.elements.composite.WebPage.refresh; import static com.jdiai.tools.StringUtils.format; -import static io.github.com.StaticSite.angularPage; -import static io.github.com.pages.sections.SideNavSection.*; -import static io.github.epam.site.steps.States.shouldBeLoggedIn; +import static com.jdiai.tools.Timer.waitCondition; +import static io.github.com.StaticSite.sideNavPage; +import static io.github.com.pages.SideNavPage.autoSizeSideNav; +import static io.github.com.pages.SideNavPage.backDropToggle; +import static io.github.com.pages.SideNavPage.basicDrawer; +import static io.github.com.pages.SideNavPage.basicSideNav; +import static io.github.com.pages.SideNavPage.bottomGap; +import static io.github.com.pages.SideNavPage.configurableMode; +import static io.github.com.pages.SideNavPage.contentRadioGroup; +import static io.github.com.pages.SideNavPage.contentToggle; +import static io.github.com.pages.SideNavPage.customEscapeBackdrop; +import static io.github.com.pages.SideNavPage.firstElement; +import static io.github.com.pages.SideNavPage.firstElementFocused; +import static io.github.com.pages.SideNavPage.fixSideNav; +import static io.github.com.pages.SideNavPage.fixedPosition; +import static io.github.com.pages.SideNavPage.implicitMainContent; +import static io.github.com.pages.SideNavPage.openCloseBehavior; +import static io.github.com.pages.SideNavPage.openSideNav; +import static io.github.com.pages.SideNavPage.responsiveContent; +import static io.github.com.pages.SideNavPage.sideNavFocusSelection; +import static io.github.com.pages.SideNavPage.sideNavOpened; +import static io.github.com.pages.SideNavPage.sideNavPosition; +import static io.github.com.pages.SideNavPage.sideNavRadioGroup; +import static io.github.com.pages.SideNavPage.sideNavToggle; +import static io.github.com.pages.SideNavPage.sideToggle; +import static io.github.com.pages.SideNavPage.sidenavBackdropContainer; +import static io.github.com.pages.SideNavPage.sidenavBackdropDrawer; +import static io.github.com.pages.SideNavPage.toggleAutoNav; +import static io.github.com.pages.SideNavPage.toggleExtraText; +import static io.github.com.pages.SideNavPage.toggleFixedSideNav; +import static io.github.com.pages.SideNavPage.toggleSideNav; +import static io.github.com.pages.SideNavPage.toolbarToggle; +import static io.github.com.pages.SideNavPage.topGap; import static org.hamcrest.Matchers.containsString; -// TODO Move to the new page -@Ignore + public class SideNavTests extends TestsInit { public static final String SIDE_NAV_CONTENT = "Sidenav content"; @@ -28,11 +57,12 @@ public class SideNavTests extends TestsInit { @BeforeMethod(alwaysRun = true) public void before() { - shouldBeLoggedIn(); - angularPage.shouldBeOpened(); + sideNavPage.open(); + waitCondition(() -> sideNavPage.isOpened()); + sideNavPage.checkOpened(); } - @Test + @Test(description = "Verify that the basic sideNav is displayed") public void verifyBasicSideNavTest() { basicSideNav.show(); basicSideNav.is().displayed(); @@ -41,7 +71,7 @@ public void verifyBasicSideNavTest() { basicSideNav.getContent().has().text(MAIN_CONTENT); } - @Test + @Test(description = "Verify that the basicDrawer sideNav is displayed") public void verifyBasicDrawerTest() { basicDrawer.show(); basicDrawer.is().displayed(); @@ -50,7 +80,37 @@ public void verifyBasicDrawerTest() { basicDrawer.getMatDrawerContent().has().text(MAIN_CONTENT); } - @Test + @Test(description = "Tests confirm menu position changes for 'start' or 'end' selector options.") + public void verifyPositionSelectionDrawerWithExplicitBackdropSettingSideNavTest() { + sidenavBackdropContainer.show(); + sidenavBackdropContainer.is().displayed(); + sidenavBackdropContainer.is().enabled(); + + sideNavPosition.click(); + (new MaterialSelectorContainer()).select("End"); + + backDropToggle.click(); + sidenavBackdropDrawer.is().displayed(); + sidenavBackdropDrawer.has().cssClass("mat-drawer-end"); + } + + @Test(description = "Test verifies first menu item focus when 'true' is selected") + public void verifyFocusSelectionDrawerWithExplicitBackdropSettingSideNavTest() { + sidenavBackdropContainer.show(); + sidenavBackdropContainer.is().displayed(); + sidenavBackdropContainer.is().enabled(); + + sideNavFocusSelection.click(); + (new MaterialSelectorContainer()).select("True"); + + backDropToggle.click(); + + firstElementFocused.base().timer().wait(() -> firstElementFocused.has().cssClass("cdk-program-focused")); + firstElementFocused.has().cssClass("cdk-focused"); + firstElementFocused.is().displayed(); + } + + @Test(description = "Verify main content is properly displayed alongside two side navigation panels") public void verifyImplicitMainContentWithTwoSideNavTest() { implicitMainContent.show(); UIElement startSideNav = implicitMainContent.getSideNav("start"); @@ -69,7 +129,7 @@ public void verifyImplicitMainContentWithTwoSideNavTest() { implicitMainContent.getContent().is().enabled(); } - @Test + @Test(description = "Tests the opening and closing functionality of the component") public void verifyOpenCloseBehaviorTest() { openCloseBehavior.show(); openCloseBehavior.getContent().is().displayed(); @@ -80,46 +140,51 @@ public void verifyOpenCloseBehaviorTest() { sideNavOpened.click(); openCloseBehavior.base().timer().wait(() -> openCloseBehavior.isEnabled()); - openCloseBehavior.getEvents().has().text("open!\nclose!"); + openCloseBehavior.base().timer().wait(() -> openCloseBehavior.getEvents().has().text("open!")); + sideNavOpened.click(); + openCloseBehavior.base().timer().wait(() -> openCloseBehavior.getEvents().has().text("open!\nclose!")); } - @Test + @Test(description = "Verify SideNav with with configurable mode") public void toggleConfigurableSideNavTest() { refresh(); configurableMode.show(); contentToggle.click(); - configurableMode.base().timer().wait(() -> configurableMode.visualValidation(".mat-sidenav")); + configurableMode.base().timer().wait(() -> configurableMode.getSideNav().has().attr(STYLE, STYLE_VISIBLE)); configurableMode.getSideNav().has().attr(STYLE, STYLE_VISIBLE); sideToggle.click(); - configurableMode.base().timer().wait(() -> configurableMode.visualValidation(".mat-sidenav")); + configurableMode.base().timer().wait(() -> configurableMode.getSideNav().has().attr(STYLE, STYLE_HIDDEN)); configurableMode.getSideNav().has().attr(STYLE, STYLE_HIDDEN); } - @Test + @Test(description = "Verify side radio group buttons") public void sideRadioGroupTest() { refresh(); contentToggle.click(); configurableMode.getContent().has().attr(STYLE, ""); + sideNavRadioGroup.base().timer().wait(() -> fixedPosition.visualValidation(".mat-sidenav-content")); sideNavRadioGroup.click("Side"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 258px;"); + configurableMode.getContent().has().attr(STYLE, "margin-left: 299px;"); sideNavRadioGroup.click("Push"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 258px; margin-right: -258px;"); + configurableMode.getContent().has().attr(STYLE, "margin-left: 300px; margin-right: -300px;"); } - @Test + @Test(description = "Verify content radio group buttons") public void contentRadioButtonsTest() { + refresh(); contentToggle.click(); + sideNavRadioGroup.base().timer().wait(() -> fixedPosition.visualValidation(".mat-sidenav-content")); sideNavRadioGroup.click("Side"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 258px;"); + configurableMode.getContent().has().attr(STYLE, "margin-left: 299px;"); contentRadioGroup.click("Push"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 258px; margin-right: -258px;"); + configurableMode.getContent().has().attr(STYLE, "margin-left: 300px; margin-right: -300px;"); } - @Test + @Test(description = "Verify toggle button") public void closeByToggleTest() { refresh(); customEscapeBackdrop.show(); @@ -128,23 +193,23 @@ public void closeByToggleTest() { customEscapeBackdrop.getContent().has().text(containsString("toggle button")); } - @Test + @Test(description = "Verify backdrop click behavior") public void closeByBackdropTest() { openSideNav.click(); customEscapeBackdrop.core().click(); customEscapeBackdrop.getContent().has().text(containsString("backdrop")); } - @Test + @Test(description = "Verify auto size SideNav") public void verifyAutoSizeSideNav() { autoSizeSideNav.show(); toggleAutoNav.click(); toggleExtraText.click(); autoSizeSideNav.getMatDrawer().has().text(containsString("Toggle extra text")); - autoSizeSideNav.getMatDrawerContent().has().attr(STYLE, "margin-left: 294px;"); + autoSizeSideNav.getMatDrawerContent().has().attr(STYLE, "margin-left: 305px;"); } - @Test + @Test(description = "Verify fixed sideNav") public void fixedSideNavTest() { String testValue = "100"; fixedPosition.show(); @@ -156,15 +221,15 @@ public void fixedSideNavTest() { bottomGap.sendKeys(testValue); fixSideNav.click(); fixedPosition.getSideNav().has().attr(STYLE, "transform: none; visibility: visible; top: 100px; bottom: " + - "100px;"); + "100px;"); toggleFixedSideNav.click(); fixedPosition.base().timer().wait(() -> fixedPosition.visualValidation(".mat-sidenav-content")); fixedPosition.getSideNav().has().attr(STYLE, "top: 100px; bottom: 100px; box-shadow: none; visibility: " + - "hidden;"); + "hidden;"); } - @Test + @Test(description = "Verify toggle responsive sideNave") public void toggleResponsiveSideNavTest() { int[] testValues = {1, 3}; responsiveContent.show(); From ac9d1513ff964f497c11eb9083488153bd428439 Mon Sep 17 00:00:00 2001 From: evgen460 Date: Fri, 26 Jan 2024 11:37:00 +0300 Subject: [PATCH 2/4] 4935_Test-refactoring-element-Sidenav3 --- .../java/io/github/com/pages/SideNavPage.java | 13 +++++----- .../tests/elements/complex/SideNavTests.java | 25 ++++++++----------- .../light/angular/asserts/SideNaveAssert.java | 21 ++++++++++++++++ .../angular/elements/complex/SideNav.java | 22 ++++++++++++++-- 4 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java index 6db100a956..d16348eab6 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java @@ -1,11 +1,12 @@ package io.github.com.pages; +import com.epam.jdi.light.angular.elements.common.Button; import com.epam.jdi.light.angular.elements.common.Checkbox; import com.epam.jdi.light.angular.elements.complex.SideNav; import com.epam.jdi.light.angular.elements.complex.radiobuttons.RadioGroup; -import com.epam.jdi.light.elements.common.UIElement; +import com.epam.jdi.light.angular.elements.composite.MaterialSelectorContainer; 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; import io.github.com.pages.sections.SideNavSection; public class SideNavPage extends NewAngularPage { @@ -33,10 +34,10 @@ public class SideNavPage extends NewAngularPage { @UI("#configurable-mode .mat-sidenav .mat-mdc-radio-group") public static RadioGroup sideNavRadioGroup; @UI("#mat-select-position") - public static UIElement sideNavPosition; + public static MaterialSelectorContainer sideNavPosition; @UI("#mat-select-focus-on-the-first-item") - public static UIElement sideNavFocusSelection; + public static MaterialSelectorContainer sideNavFocusSelection; @UI("#configurable-mode .mat-sidenav-content .mat-mdc-radio-group") public static RadioGroup contentRadioGroup; @@ -66,10 +67,10 @@ public class SideNavPage extends NewAngularPage { public static Button toggleFixedSideNav; @UI("#fixed-position .mat-sidenav-content mat-form-field input[formcontrolname='top']") - public static UIElement topGap; + public static TextField topGap; @UI("#fixed-position .mat-sidenav-content mat-form-field input[formcontrolname='bottom']") - public static UIElement bottomGap; + public static TextField bottomGap; public static SideNavSection sidenavBackdropDrawer; diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java index 8b7eac2f0a..e3761ee687 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java @@ -1,9 +1,8 @@ package io.github.epam.angular.tests.elements.complex; -import com.epam.jdi.light.angular.elements.composite.MaterialSelectorContainer; import com.epam.jdi.light.elements.common.UIElement; import io.github.epam.TestsInit; -import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import static com.epam.jdi.light.elements.composite.WebPage.refresh; @@ -19,7 +18,6 @@ import static io.github.com.pages.SideNavPage.contentRadioGroup; import static io.github.com.pages.SideNavPage.contentToggle; import static io.github.com.pages.SideNavPage.customEscapeBackdrop; -import static io.github.com.pages.SideNavPage.firstElement; import static io.github.com.pages.SideNavPage.firstElementFocused; import static io.github.com.pages.SideNavPage.fixSideNav; import static io.github.com.pages.SideNavPage.fixedPosition; @@ -55,7 +53,7 @@ public class SideNavTests extends TestsInit { public static final String MODE = "mode"; public static final String SIDE = "side"; - @BeforeMethod(alwaysRun = true) + @BeforeClass(alwaysRun = true) public void before() { sideNavPage.open(); waitCondition(() -> sideNavPage.isOpened()); @@ -87,11 +85,11 @@ public void verifyPositionSelectionDrawerWithExplicitBackdropSettingSideNavTest( sidenavBackdropContainer.is().enabled(); sideNavPosition.click(); - (new MaterialSelectorContainer()).select("End"); + sideNavPosition.select("End"); backDropToggle.click(); sidenavBackdropDrawer.is().displayed(); - sidenavBackdropDrawer.has().cssClass("mat-drawer-end"); + sidenavBackdropContainer.has().sideNavSectionOnTheRight(sidenavBackdropDrawer.getLocation()); } @Test(description = "Test verifies first menu item focus when 'true' is selected") @@ -101,13 +99,13 @@ public void verifyFocusSelectionDrawerWithExplicitBackdropSettingSideNavTest() { sidenavBackdropContainer.is().enabled(); sideNavFocusSelection.click(); - (new MaterialSelectorContainer()).select("True"); + sideNavFocusSelection.select("True"); backDropToggle.click(); firstElementFocused.base().timer().wait(() -> firstElementFocused.has().cssClass("cdk-program-focused")); - firstElementFocused.has().cssClass("cdk-focused"); firstElementFocused.is().displayed(); + firstElementFocused.is().focused(); } @Test(description = "Verify main content is properly displayed alongside two side navigation panels") @@ -131,6 +129,7 @@ public void verifyImplicitMainContentWithTwoSideNavTest() { @Test(description = "Tests the opening and closing functionality of the component") public void verifyOpenCloseBehaviorTest() { + refresh(); openCloseBehavior.show(); openCloseBehavior.getContent().is().displayed(); openCloseBehavior.getContent().is().enabled(); @@ -140,8 +139,6 @@ public void verifyOpenCloseBehaviorTest() { sideNavOpened.click(); openCloseBehavior.base().timer().wait(() -> openCloseBehavior.isEnabled()); - openCloseBehavior.base().timer().wait(() -> openCloseBehavior.getEvents().has().text("open!")); - sideNavOpened.click(); openCloseBehavior.base().timer().wait(() -> openCloseBehavior.getEvents().has().text("open!\nclose!")); } @@ -206,19 +203,17 @@ public void verifyAutoSizeSideNav() { toggleAutoNav.click(); toggleExtraText.click(); autoSizeSideNav.getMatDrawer().has().text(containsString("Toggle extra text")); - autoSizeSideNav.getMatDrawerContent().has().attr(STYLE, "margin-left: 305px;"); + autoSizeSideNav.getMatDrawerContent().has().attr(STYLE, "margin-left: 303px;"); } @Test(description = "Verify fixed sideNav") public void fixedSideNavTest() { String testValue = "100"; fixedPosition.show(); - topGap.click(); topGap.clear(); - topGap.sendKeys(testValue); - bottomGap.click(); + topGap.setValue(testValue); bottomGap.clear(); - bottomGap.sendKeys(testValue); + bottomGap.setValue(testValue); fixSideNav.click(); fixedPosition.getSideNav().has().attr(STYLE, "transform: none; visibility: visible; top: 100px; bottom: " + "100px;"); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java new file mode 100644 index 0000000000..8a4a16a48f --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java @@ -0,0 +1,21 @@ +package com.epam.jdi.light.angular.asserts; + +import com.epam.jdi.light.angular.elements.complex.SideNav; +import com.epam.jdi.light.asserts.generic.UIAssert; +import com.epam.jdi.light.common.JDIAction; +import org.hamcrest.Matchers; +import org.openqa.selenium.Point; + +import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; + +public class SideNaveAssert extends UIAssert { + + private static final String LOCATION_ERROR_MESSAGE = "SideNavSection with location %s isn't on the right side"; + + @JDIAction(value = "Assert that '{name}' has section with location '{0}' on the right side", isAssert = true) + public SideNaveAssert sideNavSectionOnTheRight(Point locationOfSection) { + jdiAssert(element().isSectionInRightPart(locationOfSection), Matchers.is(true), + String.format(LOCATION_ERROR_MESSAGE, locationOfSection)); + return this; + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java index 65664fe3ee..a131ffc69b 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java @@ -1,16 +1,28 @@ package com.epam.jdi.light.angular.elements.complex; -import com.epam.jdi.light.asserts.generic.UIAssert; +import com.epam.jdi.light.angular.asserts.SideNaveAssert; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; import com.epam.jdi.light.elements.common.UIElement; import com.epam.jdi.light.elements.complex.WebList; +import com.epam.jdi.light.elements.interfaces.base.HasLabel; +import org.openqa.selenium.Point; /** * To see an example of Checkbox web element please visit https://material.angular.io/components/sidenav/overview. */ -public class SideNav extends UIBaseElement> { +public class SideNav extends UIBaseElement implements HasLabel { + + @Override + public SideNaveAssert is() { + return new SideNaveAssert().set(this); + } + + @Override + public SideNaveAssert has() { + return is(); + } @JDIAction("Get '{name}' side nav") public UIElement getSideNav() { @@ -64,4 +76,10 @@ public UIElement getMatDrawer() { public UIElement getMatDrawerContent() { return this.find(".mat-drawer-content"); } + + @JDIAction("Is '{name}' side nav has section with location '{0}' on right side") + public boolean isSectionInRightPart(Point locationOfSection) { + int containerCenterX = this.getLocation().getX() + this.getSize().getWidth() / 2; + return locationOfSection.getX() >= containerCenterX; + } } From 7795a4b6f43a7a8adc1960915c271868bee4c267 Mon Sep 17 00:00:00 2001 From: evgen460 Date: Wed, 31 Jan 2024 16:33:01 +0300 Subject: [PATCH 3/4] 4935_Test-refactoring-element-Sidenav4 --- .../io/github/com/enums/ConfigurableMode.java | 18 +++++ .../java/io/github/com/pages/SideNavPage.java | 25 +++--- .../tests/elements/complex/SideNavTests.java | 63 ++++++++------- .../asserts/SideNavContainerAssert.java | 21 +++++ .../light/angular/asserts/SideNaveAssert.java | 28 +++++-- .../angular/elements/complex/SideNav.java | 37 ++------- .../elements/composite/SideNavContainer.java | 79 +++++++++++++++++++ 7 files changed, 191 insertions(+), 80 deletions(-) create mode 100644 jdi-light-angular-tests/src/main/java/io/github/com/enums/ConfigurableMode.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNavContainerAssert.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/enums/ConfigurableMode.java b/jdi-light-angular-tests/src/main/java/io/github/com/enums/ConfigurableMode.java new file mode 100644 index 0000000000..cccc50d11f --- /dev/null +++ b/jdi-light-angular-tests/src/main/java/io/github/com/enums/ConfigurableMode.java @@ -0,0 +1,18 @@ +package io.github.com.enums; + +public enum ConfigurableMode { + + OVER("over"), + SIDE("side"), + PUSH("push"); + + private final String mode; + + ConfigurableMode(String mode) { + this.mode = mode; + } + + public String getMode() { + return mode; + } +} diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java index d16348eab6..78ff05e19f 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/SideNavPage.java @@ -2,20 +2,20 @@ import com.epam.jdi.light.angular.elements.common.Button; import com.epam.jdi.light.angular.elements.common.Checkbox; -import com.epam.jdi.light.angular.elements.complex.SideNav; import com.epam.jdi.light.angular.elements.complex.radiobuttons.RadioGroup; import com.epam.jdi.light.angular.elements.composite.MaterialSelectorContainer; +import com.epam.jdi.light.angular.elements.composite.SideNavContainer; import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; import com.epam.jdi.light.ui.html.elements.common.TextField; import io.github.com.pages.sections.SideNavSection; public class SideNavPage extends NewAngularPage { - public static SideNav basicSideNav; - public static SideNav basicDrawer; - public static SideNav sidenavBackdropContainer; - public static SideNav implicitMainContent; - public static SideNav openCloseBehavior; + public static SideNavContainer basicSideNav; + public static SideNavContainer basicDrawer; + public static SideNavContainer sidenavBackdropContainer; + public static SideNavContainer implicitMainContent; + public static SideNavContainer openCloseBehavior; @UI("#open-close-behavior mat-checkbox") public static Checkbox sideNavOpened; @@ -23,7 +23,7 @@ public class SideNavPage extends NewAngularPage { @UI("#open-close-behavior button") public static Button sideNavToggle; - public static SideNav configurableMode; + public static SideNavContainer configurableMode; @UI("#configurable-mode .mat-sidenav button") public static Button sideToggle; @@ -42,7 +42,7 @@ public class SideNavPage extends NewAngularPage { @UI("#configurable-mode .mat-sidenav-content .mat-mdc-radio-group") public static RadioGroup contentRadioGroup; - public static SideNav customEscapeBackdrop; + public static SideNavContainer customEscapeBackdrop; @UI("#custom-escape-backdrop .mat-sidenav button") public static Button toggleSideNav; @@ -50,7 +50,7 @@ public class SideNavPage extends NewAngularPage { @UI("#custom-escape-backdrop .mat-sidenav-content button") public static Button openSideNav; - public static SideNav autoSizeSideNav; + public static SideNavContainer autoSizeSideNav; @UI("#auto-size-side-nav .mat-drawer-content button") public static Button toggleAutoNav; @@ -58,7 +58,7 @@ public class SideNavPage extends NewAngularPage { @UI("#auto-size-side-nav .mat-drawer button") public static Button toggleExtraText; - public static SideNav fixedPosition; + public static SideNavContainer fixedPosition; @UI("#fixed-position mat-checkbox") public static Checkbox fixSideNav; @@ -74,7 +74,7 @@ public class SideNavPage extends NewAngularPage { public static SideNavSection sidenavBackdropDrawer; - public static SideNav responsiveContent; + public static SideNavContainer responsiveContent; @UI("//*[@id='responsive-content']/preceding-sibling::mat-toolbar/button") public static Button toolbarToggle; @@ -85,7 +85,8 @@ public class SideNavPage extends NewAngularPage { @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='First Element']]") public static Button firstElement; - @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='First Element'] and contains(@class, 'cdk-focused')]") + // @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='First Element'] and contains(@class, 'cdk-focused')]") + @UI("//button[contains(@class, 'cdk-focused') and contains(@class, 'cdk-program-focused') and //span[contains(@class, 'mdc-button__label') and text()='First Element']]") public static Button firstElementFocused; @UI("//button[.//span[contains(@class, 'mdc-button__label') and text()='Second Element']]") diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java index e3761ee687..d504f43f24 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java @@ -1,14 +1,16 @@ package io.github.epam.angular.tests.elements.complex; -import com.epam.jdi.light.elements.common.UIElement; +import com.epam.jdi.light.angular.elements.complex.SideNav; import io.github.epam.TestsInit; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import static com.epam.jdi.light.elements.composite.WebPage.refresh; -import static com.jdiai.tools.StringUtils.format; import static com.jdiai.tools.Timer.waitCondition; import static io.github.com.StaticSite.sideNavPage; +import static io.github.com.enums.ConfigurableMode.OVER; +import static io.github.com.enums.ConfigurableMode.PUSH; +import static io.github.com.enums.ConfigurableMode.SIDE; import static io.github.com.pages.SideNavPage.autoSizeSideNav; import static io.github.com.pages.SideNavPage.backDropToggle; import static io.github.com.pages.SideNavPage.basicDrawer; @@ -39,6 +41,7 @@ import static io.github.com.pages.SideNavPage.toggleSideNav; import static io.github.com.pages.SideNavPage.toolbarToggle; import static io.github.com.pages.SideNavPage.topGap; +import static java.lang.String.format; import static org.hamcrest.Matchers.containsString; @@ -51,7 +54,6 @@ public class SideNavTests extends TestsInit { public static final String STYLE_VISIBLE = "transform: none; visibility: visible;"; public static final String STYLE_HIDDEN = "box-shadow: none; visibility: hidden;"; public static final String MODE = "mode"; - public static final String SIDE = "side"; @BeforeClass(alwaysRun = true) public void before() { @@ -103,7 +105,7 @@ public void verifyFocusSelectionDrawerWithExplicitBackdropSettingSideNavTest() { backDropToggle.click(); - firstElementFocused.base().timer().wait(() -> firstElementFocused.has().cssClass("cdk-program-focused")); + firstElementFocused.has().text("First Element"); firstElementFocused.is().displayed(); firstElementFocused.is().focused(); } @@ -111,16 +113,16 @@ public void verifyFocusSelectionDrawerWithExplicitBackdropSettingSideNavTest() { @Test(description = "Verify main content is properly displayed alongside two side navigation panels") public void verifyImplicitMainContentWithTwoSideNavTest() { implicitMainContent.show(); - UIElement startSideNav = implicitMainContent.getSideNav("start"); - UIElement endSideNav = implicitMainContent.getSideNav("end"); + SideNav start = implicitMainContent.getSideNav("start"); + SideNav end = implicitMainContent.getSideNav("end"); - startSideNav.has().attr(MODE, SIDE); - startSideNav.has().attr(STYLE, STYLE_VISIBLE); - startSideNav.has().text("Start content"); + start.has().attr(MODE, SIDE.getMode()); + start.has().attr(STYLE, STYLE_VISIBLE); + start.has().text("Start content"); - endSideNav.has().attr(MODE, SIDE); - endSideNav.has().attr(STYLE, STYLE_VISIBLE); - endSideNav.has().text("End content"); + end.has().attr(MODE, SIDE.getMode()); + end.has().attr(STYLE, STYLE_VISIBLE); + end.has().text("End content"); implicitMainContent.getContent().has().text("Implicit main content"); implicitMainContent.getContent().is().displayed(); @@ -138,8 +140,8 @@ public void verifyOpenCloseBehaviorTest() { openCloseBehavior.getSideNav().has().text(SIDE_NAV_CONTENT); sideNavOpened.click(); - openCloseBehavior.base().timer().wait(() -> openCloseBehavior.isEnabled()); - openCloseBehavior.base().timer().wait(() -> openCloseBehavior.getEvents().has().text("open!\nclose!")); + openCloseBehavior.isEnabled(); + openCloseBehavior.getEvents().has().text("open!\nclose!"); } @Test(description = "Verify SideNav with with configurable mode") @@ -159,26 +161,31 @@ public void toggleConfigurableSideNavTest() { public void sideRadioGroupTest() { refresh(); contentToggle.click(); - configurableMode.getContent().has().attr(STYLE, ""); - sideNavRadioGroup.base().timer().wait(() -> fixedPosition.visualValidation(".mat-sidenav-content")); - sideNavRadioGroup.click("Side"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 299px;"); + sideNavRadioGroup.show(); + configurableMode.getContent().is().displayed(); + configurableMode.getMatDrawer().has().configurableMode(OVER.getMode()); - sideNavRadioGroup.click("Push"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 300px; margin-right: -300px;"); + sideNavRadioGroup.click(SIDE.getMode()); + configurableMode.getContent().is().displayed(); + configurableMode.getMatDrawer().has().configurableMode(SIDE.getMode()); + + sideNavRadioGroup.click(PUSH.getMode()); + configurableMode.getContent().is().displayed(); + configurableMode.getMatDrawer().has().configurableMode(PUSH.getMode()); } @Test(description = "Verify content radio group buttons") public void contentRadioButtonsTest() { refresh(); contentToggle.click(); - sideNavRadioGroup.base().timer().wait(() -> fixedPosition.visualValidation(".mat-sidenav-content")); - sideNavRadioGroup.click("Side"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 299px;"); + sideNavRadioGroup.show(); + + sideNavRadioGroup.click(SIDE.getMode()); + configurableMode.getMatDrawer().has().configurableMode(SIDE.getMode()); - contentRadioGroup.click("Push"); - configurableMode.getContent().has().attr(STYLE, "margin-left: 300px; margin-right: -300px;"); + contentRadioGroup.click(PUSH.getMode()); + configurableMode.getMatDrawer().has().configurableMode(PUSH.getMode()); } @Test(description = "Verify toggle button") @@ -203,7 +210,6 @@ public void verifyAutoSizeSideNav() { toggleAutoNav.click(); toggleExtraText.click(); autoSizeSideNav.getMatDrawer().has().text(containsString("Toggle extra text")); - autoSizeSideNav.getMatDrawerContent().has().attr(STYLE, "margin-left: 303px;"); } @Test(description = "Verify fixed sideNav") @@ -219,7 +225,8 @@ public void fixedSideNavTest() { "100px;"); toggleFixedSideNav.click(); - fixedPosition.base().timer().wait(() -> fixedPosition.visualValidation(".mat-sidenav-content")); + + fixedPosition.base().timer().wait(() -> fixedPosition.getSideNav().is().hidden()); fixedPosition.getSideNav().has().attr(STYLE, "top: 100px; bottom: 100px; box-shadow: none; visibility: " + "hidden;"); } @@ -230,7 +237,7 @@ public void toggleResponsiveSideNavTest() { responsiveContent.show(); toolbarToggle.click(); for (int value : testValues) { - responsiveContent.getSideNavLinks().get(value).click(); + responsiveContent.getSideNav().getSideNavLinks().get(value).click(); responsiveContent.getResponsiveResults().get(value).has().text(format("Selected Nav Item %d", value)); } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNavContainerAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNavContainerAssert.java new file mode 100644 index 0000000000..4002d017f5 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNavContainerAssert.java @@ -0,0 +1,21 @@ +package com.epam.jdi.light.angular.asserts; + +import com.epam.jdi.light.angular.elements.composite.SideNavContainer; +import com.epam.jdi.light.asserts.generic.UIAssert; +import com.epam.jdi.light.common.JDIAction; +import org.hamcrest.Matchers; +import org.openqa.selenium.Point; + +import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; + +public class SideNavContainerAssert extends UIAssert { + + private static final String LOCATION_ERROR_MESSAGE = "SideNavSection with location %s isn't on the right side"; + + @JDIAction(value = "Assert that '{name}' has section with location '{0}' on the right side", isAssert = true) + public SideNavContainerAssert sideNavSectionOnTheRight(Point locationOfSection) { + jdiAssert(element().isSectionInRightPart(locationOfSection), Matchers.is(true), + String.format(LOCATION_ERROR_MESSAGE, locationOfSection)); + return this; + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java index 8a4a16a48f..a8f705cbd7 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/SideNaveAssert.java @@ -1,21 +1,33 @@ package com.epam.jdi.light.angular.asserts; import com.epam.jdi.light.angular.elements.complex.SideNav; +import com.epam.jdi.light.asserts.generic.ITextAssert; import com.epam.jdi.light.asserts.generic.UIAssert; import com.epam.jdi.light.common.JDIAction; +import org.hamcrest.Matcher; import org.hamcrest.Matchers; -import org.openqa.selenium.Point; import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; +import static java.lang.String.format; -public class SideNaveAssert extends UIAssert { +public class SideNaveAssert extends UIAssert implements ITextAssert { + private static final String MAT_DRAWER_TEMPLATE = "mat-drawer-%s"; - private static final String LOCATION_ERROR_MESSAGE = "SideNavSection with location %s isn't on the right side"; - - @JDIAction(value = "Assert that '{name}' has section with location '{0}' on the right side", isAssert = true) - public SideNaveAssert sideNavSectionOnTheRight(Point locationOfSection) { - jdiAssert(element().isSectionInRightPart(locationOfSection), Matchers.is(true), - String.format(LOCATION_ERROR_MESSAGE, locationOfSection)); + @JDIAction(value = "Assert that '{name}' text {0}", isAssert = true) + @Override + public SideNaveAssert text(Matcher condition) { + jdiAssert(element().getSideNaveText(), condition); return this; } + + @JDIAction(value = "Assert that '{name}' text is '{0}'", isAssert = true) + @Override + public SideNaveAssert text(String text) { + return text(Matchers.is(text)); + } + + @JDIAction(value = "Assert that '{name}' has class '{0}'", isAssert = true) + public void configurableMode(String mode) { + this.cssClass(format(MAT_DRAWER_TEMPLATE, mode.toLowerCase())); + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java index a131ffc69b..89432e74d6 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java @@ -24,16 +24,6 @@ public SideNaveAssert has() { return is(); } - @JDIAction("Get '{name}' side nav") - public UIElement getSideNav() { - return this.find(".mat-sidenav"); - } - - @JDIAction("Get '{name}' side nav content") - public UIElement getContent() { - return this.find(".mat-sidenav-content"); - } - /*for several side navs*/ @JDIAction("Get '{name}' side nav by '{0}' position value") public UIElement getSideNav(String position) { @@ -46,19 +36,9 @@ public UIElement getSideNav(String position) { return element; } - @JDIAction("Get '{name}' side nav content") - public UIElement getEvents() { - return getContent().find(".example-events"); - } - @JDIAction("Get '{name}' side nav content") public WebList getSideNavLinks() { - return getSideNav().finds("a"); - } - - @JDIAction("Get '{name}' side nav content") - public WebList getResponsiveResults() { - return getContent().finds("p"); + return this.finds("a"); } @JDIAction("Get '{name}' side nav items") @@ -66,20 +46,13 @@ private WebList getSideNavItems() { return this.finds(".mat-sidenav"); } - /*mat-drawer*/ - @JDIAction("Get '{name}' mat drawer") - public UIElement getMatDrawer() { - return this.find(".mat-drawer"); - } - - @JDIAction("Get '{name}' mat drawer content content") - public UIElement getMatDrawerContent() { - return this.find(".mat-drawer-content"); - } - @JDIAction("Is '{name}' side nav has section with location '{0}' on right side") public boolean isSectionInRightPart(Point locationOfSection) { int containerCenterX = this.getLocation().getX() + this.getSize().getWidth() / 2; return locationOfSection.getX() >= containerCenterX; } + + public String getSideNaveText() { + return core().text(); + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java new file mode 100644 index 0000000000..41e35702f4 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java @@ -0,0 +1,79 @@ +package com.epam.jdi.light.angular.elements.composite; + +import com.epam.jdi.light.angular.asserts.SideNavContainerAssert; +import com.epam.jdi.light.angular.elements.complex.SideNav; +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.base.UIBaseElement; +import com.epam.jdi.light.elements.common.UIElement; +import com.epam.jdi.light.elements.complex.WebList; +import com.epam.jdi.light.elements.interfaces.base.HasLabel; +import org.openqa.selenium.Point; + +public class SideNavContainer extends UIBaseElement implements HasLabel { + + + @Override + public SideNavContainerAssert is() { + return new SideNavContainerAssert().set(this); + } + + @Override + public SideNavContainerAssert has() { + return is(); + } + + @JDIAction("Get '{name}' side nav") + public SideNav getSideNav() { + return new SideNav().setCore(SideNav.class, this.find(".mat-sidenav")); + } + + @JDIAction("Get '{name}' side nav content") + public UIElement getContent() { + return this.find(".mat-sidenav-content"); + } + + @JDIAction("Get '{name}' side nav content") + public UIElement getEvents() { + return getContent().find(".example-events"); + } + + @JDIAction("Get '{name}' side nav content") + public WebList getResponsiveResults() { + return getContent().finds("p"); + } + + /*mat-drawer*/ + @JDIAction("Get '{name}' mat drawer") + public SideNav getMatDrawer() { + return new SideNav().setCore(SideNav.class, this.find(".mat-drawer")); + + } + + @JDIAction("Get '{name}' mat drawer content content") + public UIElement getMatDrawerContent() { + return this.find(".mat-drawer-content"); + } + + @JDIAction("Is '{name}' side nav has section with location '{0}' on right side") + public boolean isSectionInRightPart(Point locationOfSection) { + int containerCenterX = this.getLocation().getX() + this.getSize().getWidth() / 2; + return locationOfSection.getX() >= containerCenterX; + } + + /*for several side navs*/ + @JDIAction("Get '{name}' side nav by '{0}' position value") + public SideNav getSideNav(String position) { + UIElement element = null; + for (UIElement e : getSideNavItems()) { + if (e.attr("position").equalsIgnoreCase(position)) { + element = e; + } + } + return new SideNav().setCore(SideNav.class, element); + } + + @JDIAction("Get '{name}' side nav items") + private WebList getSideNavItems() { + return this.finds(".mat-sidenav"); + } +} From 5c940386abf5f9051974bb48f23b58eab3b5c2af Mon Sep 17 00:00:00 2001 From: evgen460 Date: Mon, 5 Feb 2024 10:38:08 +0300 Subject: [PATCH 4/4] 4935_Test-refactoring-element-Sidenav5 --- .../tests/elements/complex/SideNavTests.java | 2 +- .../angular/elements/complex/SideNav.java | 25 ------------ .../elements/composite/SideNavContainer.java | 39 ++++++++++--------- 3 files changed, 21 insertions(+), 45 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java index d504f43f24..70f74e9637 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/SideNavTests.java @@ -141,7 +141,7 @@ public void verifyOpenCloseBehaviorTest() { sideNavOpened.click(); openCloseBehavior.isEnabled(); - openCloseBehavior.getEvents().has().text("open!\nclose!"); + openCloseBehavior.getSideNav().is().notVisible(); } @Test(description = "Verify SideNav with with configurable mode") diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java index 89432e74d6..5f456cda7c 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/SideNav.java @@ -3,10 +3,8 @@ import com.epam.jdi.light.angular.asserts.SideNaveAssert; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; -import com.epam.jdi.light.elements.common.UIElement; import com.epam.jdi.light.elements.complex.WebList; import com.epam.jdi.light.elements.interfaces.base.HasLabel; -import org.openqa.selenium.Point; /** * To see an example of Checkbox web element please visit https://material.angular.io/components/sidenav/overview. @@ -24,34 +22,11 @@ public SideNaveAssert has() { return is(); } - /*for several side navs*/ - @JDIAction("Get '{name}' side nav by '{0}' position value") - public UIElement getSideNav(String position) { - UIElement element = null; - for (UIElement e : getSideNavItems()) { - if (e.attr("position").equalsIgnoreCase(position)) { - element = e; - } - } - return element; - } - @JDIAction("Get '{name}' side nav content") public WebList getSideNavLinks() { return this.finds("a"); } - @JDIAction("Get '{name}' side nav items") - private WebList getSideNavItems() { - return this.finds(".mat-sidenav"); - } - - @JDIAction("Is '{name}' side nav has section with location '{0}' on right side") - public boolean isSectionInRightPart(Point locationOfSection) { - int containerCenterX = this.getLocation().getX() + this.getSize().getWidth() / 2; - return locationOfSection.getX() >= containerCenterX; - } - public String getSideNaveText() { return core().text(); } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java index 41e35702f4..a074c543a8 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/composite/SideNavContainer.java @@ -7,10 +7,19 @@ import com.epam.jdi.light.elements.common.UIElement; import com.epam.jdi.light.elements.complex.WebList; import com.epam.jdi.light.elements.interfaces.base.HasLabel; +import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.Point; +import java.util.function.Predicate; + public class SideNavContainer extends UIBaseElement implements HasLabel { + private static final String POSITION = "position"; + private static final String ATTRIBUTE_NOT_FOUND_MESSAGE = "Element with attribute %s %s not found"; + + private Predicate attributeMatches(String attributeName, String attributeValue) { + return e -> e.attr(attributeName).equalsIgnoreCase(attributeValue); + } @Override public SideNavContainerAssert is() { @@ -27,22 +36,26 @@ public SideNav getSideNav() { return new SideNav().setCore(SideNav.class, this.find(".mat-sidenav")); } - @JDIAction("Get '{name}' side nav content") - public UIElement getContent() { - return this.find(".mat-sidenav-content"); + @JDIAction("Get '{name}' side nav by '{0}' position value") + public SideNav getSideNav(String position) { + String notFoundMessage = String.format(ATTRIBUTE_NOT_FOUND_MESSAGE, POSITION, position); + var sideNav = getSideNavItems().stream() + .filter(attributeMatches(POSITION, position)) + .findFirst() + .orElseThrow(() -> new NoSuchElementException(notFoundMessage)); + return new SideNav().setCore(SideNav.class, sideNav); } @JDIAction("Get '{name}' side nav content") - public UIElement getEvents() { - return getContent().find(".example-events"); + public UIElement getContent() { + return this.find(".mat-sidenav-content"); } - @JDIAction("Get '{name}' side nav content") + @JDIAction("Get paragraphs from the side navigation content") public WebList getResponsiveResults() { return getContent().finds("p"); } - /*mat-drawer*/ @JDIAction("Get '{name}' mat drawer") public SideNav getMatDrawer() { return new SideNav().setCore(SideNav.class, this.find(".mat-drawer")); @@ -60,18 +73,6 @@ public boolean isSectionInRightPart(Point locationOfSection) { return locationOfSection.getX() >= containerCenterX; } - /*for several side navs*/ - @JDIAction("Get '{name}' side nav by '{0}' position value") - public SideNav getSideNav(String position) { - UIElement element = null; - for (UIElement e : getSideNavItems()) { - if (e.attr("position").equalsIgnoreCase(position)) { - element = e; - } - } - return new SideNav().setCore(SideNav.class, element); - } - @JDIAction("Get '{name}' side nav items") private WebList getSideNavItems() { return this.finds(".mat-sidenav");