From 96f6f03afb530317068ec210398ea3c25a4cf37b Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 30 Oct 2023 16:16:30 +0300 Subject: [PATCH 01/12] rebase commit --- .../main/java/io/github/com/StaticSite.java | 4 + .../java/io/github/com/pages/ChipsPage.java | 63 +++++++ .../tests/elements/complex/ChipsTests.java | 125 ++++++++----- .../jdi/light/angular/asserts/ChipAssert.java | 8 + .../angular/asserts/ChipGroupAssert.java | 44 +++++ .../light/angular/asserts/ChipsAssert.java | 6 + .../light/angular/elements/common/Chip.java | 62 +++++++ .../angular/elements/complex/ChipGroup.java | 167 ++++++++++++++++++ .../light/angular/elements/complex/Chips.java | 32 +++- .../angular/elements/interfaces/HasColor.java | 32 ++++ .../angular/elements/interfaces/HasIcon.java | 33 ++++ .../angular/elements/interfaces/HasImage.java | 32 ++++ .../elements/interfaces/HasOrientation.java | 20 +++ .../elements/interfaces/IsGroupElement.java | 19 ++ 14 files changed, 603 insertions(+), 44 deletions(-) create mode 100644 jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasOrientation.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/IsGroupElement.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 dee71067e2..cd04ed7ce4 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 @@ -8,6 +8,7 @@ import io.github.com.pages.ButtonTogglePage; import io.github.com.pages.ButtonsPage; import io.github.com.pages.CheckBoxPage; +import io.github.com.pages.ChipsPage; import io.github.com.pages.ProgressBarPage; import io.github.com.pages.ProgressSpinnerPage; import io.github.com.pages.RadioButtonPage; @@ -41,4 +42,7 @@ public class StaticSite { @Url("checkbox") public static CheckBoxPage checkBoxPage; + + @Url("chips") + public static ChipsPage chipsPage; } diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java new file mode 100644 index 0000000000..27a3e53480 --- /dev/null +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java @@ -0,0 +1,63 @@ +package io.github.com.pages; + +import com.epam.jdi.light.angular.elements.complex.ChipGroup; +import com.epam.jdi.light.angular.elements.complex.Chips; +import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; +import com.epam.jdi.light.ui.html.elements.common.Text; + +import static com.jdiai.tools.Timer.waitCondition; + +public class ChipsPage extends NewAngularPage { + + @UI("#basic-chips-row") + public static ChipGroup basicChips; + + @UI("#stacked-chips-list") + public static ChipGroup stackedChips; + + @UI("#chips-autocomplete-field") + public static ChipGroup autocompleteChips; + + @UI("#chips-with-input-field") + public static ChipGroup inputChips; + + @UI("#chips-with-form-control") + public static ChipGroup formControlChips; + + @UI("#chips-drag-and-drop") + public static ChipGroup dragAndDropChips; + + @UI("#chips-avatar") + public static ChipGroup avatarChips; + + @UI("#chips-disabled-ripple") + public static ChipGroup disabledRippleChips; + + @UI("#chips-enabled-ripple") + public static ChipGroup enabledRippleChips; + + @UI("#chips-disabled") + public static ChipGroup disabledChips; + + @UI("#chips-highlighted") + public static ChipGroup highlightedChips; + + @UI("#multiple-chips") + public static ChipGroup multipleChips; + + @UI("#chips-with-error-state") + public static ChipGroup errorChips; + + @UI("#basic-chips-label") + public static Text basicSelectedValue; + + @UI("#stacked-chips-label") + public static Text stackedSelectedValue; + +// @Override +// public void checkOpened() { +// super.checkOpened(); +// waitCondition(() -> !basicChips.isDisabled()); +// } + +} diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java index 58d589185f..59da7c953f 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java @@ -1,6 +1,8 @@ package io.github.epam.angular.tests.elements.complex; +import io.github.com.pages.ChipsPage; import io.github.epam.TestsInit; +import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Ignore; import org.testng.annotations.Test; @@ -9,18 +11,27 @@ import java.util.List; import static com.jdiai.tools.StringUtils.format; -import static io.github.com.StaticSite.angularPage; -import static io.github.com.pages.sections.ChipsSection.*; +import static com.jdiai.tools.Timer.waitCondition; +import static io.github.com.StaticSite.chipsPage; +import static io.github.com.pages.ChipsPage.autocompleteChips; +import static io.github.com.pages.ChipsPage.basicChips; +import static io.github.com.pages.ChipsPage.inputChips; +import static io.github.com.pages.ChipsPage.multipleChips; +import static io.github.com.pages.ChipsPage.stackedChips; +import static io.github.com.pages.ChipsPage.stackedSelectedValue; +import static io.github.com.pages.sections.ChipsSection.chipsAutocompleteField; +import static io.github.com.pages.sections.ChipsSection.chipsAutocompleteInput; +import static io.github.com.pages.sections.ChipsSection.chipsWithInputInput; import static io.github.epam.site.steps.States.shouldBeLoggedIn; // TODO Move to the new page -@Ignore +//@Ignore public class ChipsTests extends TestsInit { private static final String ONEFISH = "One fish"; private static final String TWOFISH = "Two fish"; private static final String PRIMARYFISH = "Primary fish"; - private static final String ACCENTFISH = "Accent fish"; + private static final String WARNFISH = "Warn fish"; private static final String NONE = "none"; private static final String PRIMARY = "Primary"; @@ -33,34 +44,42 @@ public class ChipsTests extends TestsInit { private static final String LIME = "Lime"; - @BeforeMethod(alwaysRun = true) +// @BeforeMethod(alwaysRun = true) +// public void before() { +// shouldBeLoggedIn(); +// angularPage.shouldBeOpened(); +// } + + @BeforeClass public void before() { - shouldBeLoggedIn(); - angularPage.shouldBeOpened(); + chipsPage.open(); + waitCondition(() -> chipsPage.isOpened()); + chipsPage.checkOpened(); } @Test public void basicChipsTest() { - basicChipsRow.show(); - basicChipsRow.is().displayed(); - basicChipsRow.is().assertChipsIsEnabled(); - basicChipsRow.clickChipsByTextValue(ONEFISH); - basicChipsRow.clickChipsByTextValue(TWOFISH); - basicChipsRow.clickChipsByTextValue(PRIMARYFISH); - basicChipsRow.clickChipsByTextValue(ACCENTFISH); - - basicSelectedValue.has().text(format("You clicked: %s", ACCENTFISH)); + basicChips.show(); +// basicChips.is().displayed(); +// basicChips.is().assertChipsIsEnabled(); +// basicChips.selectByText(ONEFISH); + basicChips.selectByText(TWOFISH); + basicChips.selectByText(PRIMARYFISH); + basicChips.selectByText(WARNFISH); + + ChipsPage.basicSelectedValue.has().text(format("You clicked: %s", WARNFISH)); } @Test public void stackedChipsTest() { - stackedChipsList.show(); - stackedChipsList.is().displayed(); - stackedChipsList.is().assertChipsIsEnabled(); - stackedChipsList.clickChipsByTextValue(NONE); - stackedChipsList.clickChipsByTextValue(PRIMARY); - stackedChipsList.clickChipsByTextValue(ACCENT); - stackedChipsList.clickChipsByTextValue(WARN); + stackedChips.show(); +// stackedChipsList.is().displayed(); +// stackedChipsList.is().assertChipsIsEnabled(); + stackedChips.is().vertical(); + stackedChips.selectByText(NONE); + stackedChips.selectByText(PRIMARY); + stackedChips.selectByText(ACCENT); + stackedChips.selectByText(WARN); stackedSelectedValue.has().text(format("You clicked: %s", WARN)); } @@ -70,29 +89,49 @@ public void chipsAutocompleteTest() { String[] expectedValuesArray = { "Apple", "Lemon", "Lime", "Orange", "Strawberry"}; List expectedValues = Arrays.asList(expectedValuesArray); - chipsAutocompleteField.show(); - chipsAutocompleteField.is().displayed(); - chipsAutocompleteInput.is().assertChipsIsEnabled(); - chipsAutocompleteInput.has().assertChipsHasPlaceholder(PLACEHOLDER); - chipsAutocompleteInput.has().assertChipsHasOptions(expectedValues); - - chipsAutocompleteInput.setValue(LEMON); - chipsAutocompleteField.collapseField(); - chipsAutocompleteInput.setValue(APPLE); - chipsAutocompleteField.collapseField(); - chipsAutocompleteInput.setValue(LIME); - chipsAutocompleteField.collapseField(); + autocompleteChips.show(); + +// autocompleteChips.is().disabled(); +// chipsAutocompleteField.is().displayed(); +// chipsAutocompleteInput.is().assertChipsIsEnabled(); +// autocompleteChips.has().assertChipsHasPlaceholder(PLACEHOLDER); +// autocompleteChips.has().assertChipsHasOptions(expectedValues); + + autocompleteChips.setValue(LEMON); +// chipsAutocompleteField.collapseField(); +// chipsAutocompleteInput.setValue(APPLE); +// chipsAutocompleteField.collapseField(); +// chipsAutocompleteInput.setValue(LIME); +// chipsAutocompleteField.collapseField(); + + } @Test public void chipsWithInputTest() { - chipsWithInputField.show(); - chipsWithInputField.is().displayed(); - chipsWithInputInput.is().assertChipsIsEnabled(); - chipsWithInputInput.has().assertChipsHasPlaceholder(PLACEHOLDER); - chipsWithInputInput.input("Kiwi" + "\n"); - chipsWithInputInput.input("Melon"); - chipsWithInputInput.clearInputField(); - chipsWithInputInput.input("Rockmelon" + "\n"); + inputChips.show(); + chipsWithInputInput.is().displayed(); +// inputChips.is().assertChipsIsEnabled(); + inputChips.has().assertChipsHasPlaceholder(PLACEHOLDER); + inputChips.input("Kiwi" + "\n"); + inputChips.input("Melon"); + inputChips.clearInputField(); + inputChips.input("Rockmelon" + "\n"); + } + + + @Test + public void mult() { + multipleChips.show(); +// multipleChips.is().displayed(); +// multipleChips.is().multiselectable(); } +// +// @Test +// public void testTest() { +// basicChips.getChipsByIndex(1).click(); +// ChipsPage.basicSelectedValue.has().text(format("You clicked: %s", ONEFISH)); +// System.out.println("Hello world!"); +// System.out.println(basicChips.getText()); +// } } \ No newline at end of file diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java new file mode 100644 index 0000000000..87373dcb41 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java @@ -0,0 +1,8 @@ +package com.epam.jdi.light.angular.asserts; + +import com.epam.jdi.light.angular.elements.common.Chip; +import com.epam.jdi.light.asserts.generic.UIAssert; + +public class ChipAssert extends UIAssert { + +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java new file mode 100644 index 0000000000..050a22258e --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java @@ -0,0 +1,44 @@ +package com.epam.jdi.light.angular.asserts; + +import com.epam.jdi.light.angular.elements.complex.ChipGroup; +import com.epam.jdi.light.asserts.generic.UIAssert; +import com.epam.jdi.light.common.JDIAction; +import org.hamcrest.Matchers; + +import java.util.List; + +import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; + +public class ChipGroupAssert extends UIAssert { + + @JDIAction("") + public ChipGroupAssert vertical(){ + jdiAssert(element().getOrientation(), Matchers.is("vertical")); + return this; + } + + @JDIAction("Assert that '{name}' has placeholder '{0}'") + public ChipGroupAssert assertChipsHasPlaceholder(String expected) { + jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); + return this; + } + + @JDIAction("Assert that '{name}' has options") + public ChipGroupAssert assertChipsHasOptions(List options) { + jdiAssert(element().options(), Matchers.is(options)); + return this; + } + + public ChipGroupAssert multiselectable() { + jdiAssert(element().isMultiselectable(), Matchers.is(true)); + return this; + } + + @JDIAction("Assert that '{name}' is displayed") + public ChipGroupAssert displayed() { + jdiAssert(element().isDisplayed() ? "displayed" : "hidden", Matchers.is("displayed")); + return this; + } + + +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java index d52e787895..255b6fe2ff 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java @@ -29,4 +29,10 @@ public ChipsAssert assertChipsHasPlaceholder(String expected) { jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); return this; } + + @JDIAction("Assert that '{name}' is multiple selection") + public ChipsAssert assertChipsIsMultiselectable() { + jdiAssert(element().isMultipleSelection(), Matchers.is(true)); + return this; + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java new file mode 100644 index 0000000000..de4f365127 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -0,0 +1,62 @@ +package com.epam.jdi.light.angular.elements.common; + +import com.epam.jdi.light.angular.asserts.ChipAssert; +import com.epam.jdi.light.angular.elements.interfaces.HasColor; +import com.epam.jdi.light.angular.elements.interfaces.HasIcon; +import com.epam.jdi.light.angular.elements.interfaces.HasImage; +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.base.UIBaseElement; +import com.epam.jdi.light.elements.interfaces.base.HasClick; + +public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage { + +// @Override +// @JDIAction("Get if '{name}' is enabled") +// public boolean isEnabled() { +// return hasAttribute("disabled"); +// } + + @JDIAction("Close '{name}'") + public void close() { + find("matChipRemove").click(); + } + + @JDIAction ("Get if '{name}' is removable") + public boolean isRemovable() { + return hasAttribute("matchipremove"); + } + + @JDIAction("Get if '{name} is focused'") + public boolean isFocused() { + return hasClass("cdk-focused"); + } + + @JDIAction("Get if '{name} is selected'") + public boolean isSelected() { + return hasClass("mat-mdc-chip-selected"); + } + + @JDIAction("Get if '{name} checkmark is visible'") + public boolean showCheckMark() { + return find("mdc-evolution-chip__checkmark").isVisible(); + } + + public String getText() { + return find(".mdc-evolution-chip__text-label").getText(); + } + + public void click() { + core().click(); + } + +// @JDIAction("Get '{name}' text") +// public String getText() { +// return +// } + + @Override + public ChipAssert is() { + return new ChipAssert().set(this); + } + +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java new file mode 100644 index 0000000000..74feff082b --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -0,0 +1,167 @@ +package com.epam.jdi.light.angular.elements.complex; + +import com.epam.jdi.light.angular.asserts.ChipGroupAssert; +import com.epam.jdi.light.angular.asserts.ChipsAssert; +import com.epam.jdi.light.angular.elements.common.Chip; +import com.epam.jdi.light.angular.elements.interfaces.IsGroupElement; +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 org.openqa.selenium.By; +import org.openqa.selenium.Keys; +import org.openqa.selenium.Point; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class ChipGroup extends UIBaseElement implements IsGroupElement { + + private final String matOptions = "mat-option"; +// public String backdropField = "#chips-autocomplete-field"; + + @Override + public List groupElements() { + core().timer().wait(() -> core().finds(".mat-mdc-chip").isDisplayed()); + return core().finds(".mat-mdc-chip").stream() + .map(listItem -> new Chip().setCore(Chip.class, listItem)) + .collect(Collectors.toList()); + } + + @Override + public Chip getElement(String value) { + return groupElements().stream() + .filter(element -> element.getText().equals(value)) + .findFirst() + .get(); + } + + @Override + public boolean isDisplayed() { + return groupElements().stream() + .allMatch(chip -> chip.isDisabled() == true); + //return super.isDisplayed(); + } + + public void selectByText(String text) { + getElement(text).click(); + } + + public void setValue(String selectValue) { + core().click(); + select(selectValue); + } + + @JDIAction("'{name}' input '{0}' value") + public void input(String value) { + inputField().input(value); + } + + @JDIAction("Clear value from '{name}'") + public void clearInputField() { + inputField().sendKeys(Keys.CONTROL + "a"); + inputField().sendKeys(Keys.DELETE); + } + + @JDIAction("Select value '{0}' for '{name}'") + public void select(String value) { + if (value == null) return; + WebList options = getOptions(this.matOptions); + options.get(value).click(); + } + + @JDIAction("Get placeholder for '{name}'") + public String getPlaceholderForChips() { + String placeholder = "placeholder"; + return inputField().hasAttribute(placeholder) ? inputField().getAttribute(placeholder) : ""; + } + +// @JDIAction("Collapse '{name}' chips autocomplete field") +// public void collapseField() { +// getBackdropField().core() +// .click(getPointOutsideField().getX(), getPointOutsideField().getY()); +// } + + +// @JDIAction("Get '{name}' chips by text '{0}'") +// public UIElement getChipsByText(String value) { +// UIElement element = null; +// for (UIElement e : getChips()) { +// if (e.getText().equalsIgnoreCase(value)) { +// element = e; +// } +// } +// return element; +// } +// +// +// +// +// @JDIAction("Select '{0}' in '{name}'") +// public void select(List values) { +// values.forEach(value -> { +// Chip chip = getElement(value); +// if (!chip.isSelected()) { +// chip.click(); +// } +// }); +// } + + @JDIAction("Get options for '{name}'") + public List options() { + getItems(); + return getValues(); + } + + @JDIAction("") + public String getOrientation() { + return hasClass("mat-chip-list-stacked") ? "vertical" : "horizontal"; + } + + @JDIAction("") + public String isMultiselectable() { + return attr("aria-multiselectable"); + } + + private WebList getChips() { + return this.finds(".mat-mdc-chip"); + } + + @Override + public ChipGroupAssert is() { + return new ChipGroupAssert().set(this); + } + +// protected UIElement getBackdropField() { +// return new UIElement(By.cssSelector(backdropField)); +// } + +// protected Point getPointOutsideField() { +// UIElement uiElement = getBackdropField(); +// return new Point(uiElement.core().getRect(). +// getWidth() + 3, uiElement.core().getRect().getHeight() + 3); +// } + + public UIElement inputField() { + return find("input"); + } + + private WebList getOptions(String css) { + return new WebList(By.cssSelector(css)); + } + + private WebList getItems() { + inputField().click(); + WebList options = getOptions(matOptions); + inputField().click(); + return options; + } + + private List getValues() { + List values = new ArrayList<>(); + WebList options = getOptions(this.matOptions); + options.forEach(option -> values.add(option.getValue())); + return values; + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java index 80854eaef1..dbada89a45 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java @@ -51,6 +51,10 @@ public UIElement getChipsByText(String value) { return element; } + public UIElement getChipsByIndex(int index) { + return getChips().get(index); + } + @JDIAction("'{name}' has text '{0}'") public boolean chipsHasText(String value) { return getChipsByText(value).getText().equalsIgnoreCase(value); @@ -106,6 +110,27 @@ public void collapseField() { .click(getPointOutsideField().getX(), getPointOutsideField().getY()); } + @JDIAction("") + public String getOrientation() { + return hasClass("mat-mdc-chip-set-stacked") ? "vertical" : "horizontal"; + } + + @JDIAction("") + public boolean isMultipleSelection() { + return attr("aria-multiselectable").equals("true"); + } + + + + + + + + + + + + @Override public ChipsAssert is() { @@ -123,7 +148,7 @@ protected Point getPointOutsideField() { } private WebList getChips() { - return this.finds("mat-chip"); + return this.finds(".mat-mdc-chip"); } private WebList getOptions(String css) { @@ -144,4 +169,9 @@ private List getValues() { return values; } + @Override + public String getText() { + return getChipsByIndex(1).find(".mdc-evolution-chip__text-label").getText(); + } + } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java new file mode 100644 index 0000000000..0a0da6db0e --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java @@ -0,0 +1,32 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; + +/** + * Interface HasColor includes methods to check element color and background color. + */ +public interface HasColor extends ICoreElement { + + /** + * Get element color. + * + * @return color value + */ + + @JDIAction("Get '{name}' color") + default String color() { + return core().css("color"); + } + + /** + * Get element background color. + * + * @return background color value + */ + + @JDIAction("Get '{name}' background color") + default String backgroundColor() { + return core().css("background-color"); + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java new file mode 100644 index 0000000000..76c67075d9 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java @@ -0,0 +1,33 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.angular.elements.common.Icon; +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; + +/** + * Represents an element that has an {@link Icon}. + */ +public interface HasIcon extends ICoreElement { + + String ICON_LOCATOR = ".//mat-icon"; + + /** + * Gets the icon of the element. + * + * @return icon of the element as {@link Icon} + */ + @JDIAction("Get '{name}' icon") + default Icon icon() { + return new Icon().setCore(Icon.class, core().find(ICON_LOCATOR)); + } + + /** + * Checks if element has icon or not. + * + * @return {@code true} if element has icon, otherwise {@code false} + */ + @JDIAction("Get if '{name}' has icon") + default boolean hasIcon() { + return core().finds(ICON_LOCATOR).isNotEmpty(); + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java new file mode 100644 index 0000000000..3ac0522c13 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java @@ -0,0 +1,32 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; +import com.epam.jdi.light.ui.html.elements.common.Image; + +/** + * Represents an element that has an {@link Image}. + */ +public interface HasImage extends ICoreElement { + + /** + * Gets the image of the element. + * + * @return image of the element as {@link Image} + */ + @JDIAction("Get '{name}' image") + default Image image() { + return new Image().setCore(Image.class, find("img")); + } + + /** + * Checks that image or background image is displayed. + * + * @return {@code true} if the image is displayed, otherwise {@code false} + */ + @JDIAction("Check that '{name}' image is displayed") + default boolean hasImage() { + return core().find("img").isDisplayed() + || core().find("//*[contains(@style, 'background-image')]").isDisplayed(); + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasOrientation.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasOrientation.java new file mode 100644 index 0000000000..0652cfbac5 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasOrientation.java @@ -0,0 +1,20 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; + +/** + * Interface HasOrientation includes methods to check element orientation. + */ +public interface HasOrientation extends ICoreElement { + + /** + * Checks if element is vertical or not. + * + * @return {@code true} if element is vertical, otherwise {@code false} + */ + @JDIAction("Get if '{name}' is vertical") + default boolean isVertical() { + return core().attr("class").contains("-vertical"); + } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/IsGroupElement.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/IsGroupElement.java new file mode 100644 index 0000000000..87b4b01335 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/IsGroupElement.java @@ -0,0 +1,19 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.base.UIBaseElement; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; + +import java.util.List; + +public interface IsGroupElement> extends ICoreElement { + + List groupElements(); + + A getElement(String value); + + @JDIAction("Get size of '{name}'") + default int size() { + return groupElements().size(); + } +} From c8fdb1e71faaf074c4d8ddcf0dfd706ab7064790 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Wed, 1 Nov 2023 22:07:59 +0300 Subject: [PATCH 02/12] rebase --- .../java/io/github/com/pages/AngularPage.java | 1 - .../java/io/github/com/pages/ChipsPage.java | 9 -- .../com/pages/sections/ChipsSection.java | 42 --------- .../tests/elements/complex/ChipsTests.java | 88 +++++++++---------- .../jdi/light/angular/asserts/ChipAssert.java | 16 ++++ .../angular/asserts/ChipGroupAssert.java | 7 +- .../light/angular/asserts/ChipsAssert.java | 38 -------- .../angular/asserts/ChipsAssertDELETE.java | 33 +++++++ .../light/angular/elements/common/Chip.java | 21 ++--- .../angular/elements/complex/ChipGroup.java | 69 ++++++--------- .../complex/{Chips.java => ChipsDELETE.java} | 20 +---- 11 files changed, 131 insertions(+), 213 deletions(-) delete mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java rename jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/{Chips.java => ChipsDELETE.java} (94%) 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 7c2975e6cf..73398880ad 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 @@ -34,7 +34,6 @@ public class AngularPage extends WebPage { public static SideNavSection sidenavSection; public static ExpansionPanelSection expansionPanelSection; public static SortingOverviewSection sortingOverviewSection; - public static ChipsSection chipsSection; public static TableSection tableSection; public static DividerSection dividerSection; } diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java index 27a3e53480..c969346c4d 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java @@ -1,12 +1,9 @@ package io.github.com.pages; import com.epam.jdi.light.angular.elements.complex.ChipGroup; -import com.epam.jdi.light.angular.elements.complex.Chips; import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; import com.epam.jdi.light.ui.html.elements.common.Text; -import static com.jdiai.tools.Timer.waitCondition; - public class ChipsPage extends NewAngularPage { @UI("#basic-chips-row") @@ -54,10 +51,4 @@ public class ChipsPage extends NewAngularPage { @UI("#stacked-chips-label") public static Text stackedSelectedValue; -// @Override -// public void checkOpened() { -// super.checkOpened(); -// waitCondition(() -> !basicChips.isDisabled()); -// } - } diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java index f85a7ba556..e69de29bb2 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java @@ -1,42 +0,0 @@ -package io.github.com.pages.sections; - -import com.epam.jdi.light.angular.elements.complex.Chips; -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.Text; - -public class ChipsSection extends Section { - - public static Chips chips; - - @UI("#mat-chip-list-0") - public static Chips basicChipsRow; - - @UI("#mat-chip-list-1") - public static Chips stackedChipsList; - - @UI("#basic-chips-label") - public static Text basicSelectedValue; - - @UI("#stacked-chips-label") - public static Text stackedSelectedValue; - - @UI("#chips-autocomplete-field") - public static Chips chipsAutocompleteField; - - @UI("#mat-chip-list-input-0") - public static Chips chipsAutocompleteInput; - - @UI("#mat-chip-list-2") - public static Chips autocompleteChipsList; - - @UI("#chips-with-input-field") - public static Chips chipsWithInputField; - - @UI("#mat-chip-list-input-1") - public static Chips chipsWithInputInput; - - @UI("#mat-chip-list-3") - public static Chips chipsWithInputList; - -} diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java index 59da7c953f..3d47703ef8 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java @@ -2,9 +2,7 @@ import io.github.com.pages.ChipsPage; import io.github.epam.TestsInit; -import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Ignore; import org.testng.annotations.Test; import java.util.Arrays; @@ -15,17 +13,12 @@ import static io.github.com.StaticSite.chipsPage; import static io.github.com.pages.ChipsPage.autocompleteChips; import static io.github.com.pages.ChipsPage.basicChips; +import static io.github.com.pages.ChipsPage.disabledChips; import static io.github.com.pages.ChipsPage.inputChips; import static io.github.com.pages.ChipsPage.multipleChips; import static io.github.com.pages.ChipsPage.stackedChips; import static io.github.com.pages.ChipsPage.stackedSelectedValue; -import static io.github.com.pages.sections.ChipsSection.chipsAutocompleteField; -import static io.github.com.pages.sections.ChipsSection.chipsAutocompleteInput; -import static io.github.com.pages.sections.ChipsSection.chipsWithInputInput; -import static io.github.epam.site.steps.States.shouldBeLoggedIn; -// TODO Move to the new page -//@Ignore public class ChipsTests extends TestsInit { private static final String ONEFISH = "One fish"; @@ -43,14 +36,7 @@ public class ChipsTests extends TestsInit { private static final String LEMON = "Lemon"; private static final String LIME = "Lime"; - -// @BeforeMethod(alwaysRun = true) -// public void before() { -// shouldBeLoggedIn(); -// angularPage.shouldBeOpened(); -// } - - @BeforeClass + @BeforeMethod public void before() { chipsPage.open(); waitCondition(() -> chipsPage.isOpened()); @@ -60,9 +46,7 @@ public void before() { @Test public void basicChipsTest() { basicChips.show(); -// basicChips.is().displayed(); -// basicChips.is().assertChipsIsEnabled(); -// basicChips.selectByText(ONEFISH); + basicChips.is().displayed(); basicChips.selectByText(TWOFISH); basicChips.selectByText(PRIMARYFISH); basicChips.selectByText(WARNFISH); @@ -73,8 +57,7 @@ public void basicChipsTest() { @Test public void stackedChipsTest() { stackedChips.show(); -// stackedChipsList.is().displayed(); -// stackedChipsList.is().assertChipsIsEnabled(); + stackedChips.is().displayed(); stackedChips.is().vertical(); stackedChips.selectByText(NONE); stackedChips.selectByText(PRIMARY); @@ -90,48 +73,59 @@ public void chipsAutocompleteTest() { "Apple", "Lemon", "Lime", "Orange", "Strawberry"}; List expectedValues = Arrays.asList(expectedValuesArray); autocompleteChips.show(); - -// autocompleteChips.is().disabled(); -// chipsAutocompleteField.is().displayed(); -// chipsAutocompleteInput.is().assertChipsIsEnabled(); -// autocompleteChips.has().assertChipsHasPlaceholder(PLACEHOLDER); -// autocompleteChips.has().assertChipsHasOptions(expectedValues); + autocompleteChips.is().displayed(); + autocompleteChips.has().assertChipsHasPlaceholder("New Fruit..."); + autocompleteChips.has().assertChipsHasOptions(expectedValues); autocompleteChips.setValue(LEMON); -// chipsAutocompleteField.collapseField(); -// chipsAutocompleteInput.setValue(APPLE); -// chipsAutocompleteField.collapseField(); -// chipsAutocompleteInput.setValue(LIME); -// chipsAutocompleteField.collapseField(); - - + autocompleteChips.collapseField(); + autocompleteChips.is().hasElement(LEMON); + autocompleteChips.setValue(APPLE); + autocompleteChips.collapseField(); + autocompleteChips.is().hasElement(APPLE); + autocompleteChips.setValue(LIME); + autocompleteChips.collapseField(); + autocompleteChips.is().hasElement(LIME); } @Test public void chipsWithInputTest() { inputChips.show(); - chipsWithInputInput.is().displayed(); -// inputChips.is().assertChipsIsEnabled(); + inputChips.is().displayed(); inputChips.has().assertChipsHasPlaceholder(PLACEHOLDER); inputChips.input("Kiwi" + "\n"); inputChips.input("Melon"); inputChips.clearInputField(); inputChips.input("Rockmelon" + "\n"); + inputChips.is().hasElement("Kiwi"); + inputChips.is().hasElement("Rockmelon"); + } + + @Test + public void chipsRemovableTest() { + inputChips.show(); + inputChips.is().displayed(); + inputChips.getElement("Lemon").is().removable(); + inputChips.getElement("Lemon").close(); + inputChips.getElement("Lemon"); } + @Test + public void chipDisabledTest() { + disabledChips.groupElements().get(0).is().disabled(); + disabledChips.groupElements().get(1).is().disabled(); + disabledChips.groupElements().get(2).is().disabled(); + + } @Test - public void mult() { + public void chipsMultipleSelectionTest() { multipleChips.show(); -// multipleChips.is().displayed(); -// multipleChips.is().multiselectable(); + multipleChips.is().displayed(); + multipleChips.is().multiselectable(); + multipleChips.selectByText("multiple color none"); + multipleChips.selectByText("multiple color Primary"); + multipleChips.getElement("multiple color none").is().selected(); + multipleChips.getElement("multiple color Primary").is().selected(); } -// -// @Test -// public void testTest() { -// basicChips.getChipsByIndex(1).click(); -// ChipsPage.basicSelectedValue.has().text(format("You clicked: %s", ONEFISH)); -// System.out.println("Hello world!"); -// System.out.println(basicChips.getText()); -// } } \ No newline at end of file diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java index 87373dcb41..44110e7586 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java @@ -2,7 +2,23 @@ import com.epam.jdi.light.angular.elements.common.Chip; 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 class ChipAssert extends UIAssert { + @JDIAction("Assert that '{name}' enabled") + public ChipAssert selected() { + jdiAssert(element().selected(), Matchers.is(true)); + return this; + } + + @JDIAction("Assert that '{name}' ") + public ChipAssert removable() { + jdiAssert(element().removable(), Matchers.is(true)); + return this; + } + } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java index 050a22258e..845f27ea12 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java @@ -30,7 +30,12 @@ public ChipGroupAssert assertChipsHasOptions(List options) { } public ChipGroupAssert multiselectable() { - jdiAssert(element().isMultiselectable(), Matchers.is(true)); + jdiAssert(element().isMultiselectable(), Matchers.is("true")); + return this; + } + + public ChipGroupAssert hasElement(String expected) { + jdiAssert(element().hasElement(expected), Matchers.is(true)); return this; } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java deleted file mode 100644 index 255b6fe2ff..0000000000 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.epam.jdi.light.angular.asserts; - -import com.epam.jdi.light.angular.elements.complex.Chips; -import com.epam.jdi.light.asserts.generic.UIAssert; -import com.epam.jdi.light.common.JDIAction; -import org.hamcrest.Matchers; - -import java.util.List; - -import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; - -public class ChipsAssert extends UIAssert { - - - @JDIAction("Assert that '{name}' enabled") - public ChipsAssert assertChipsIsEnabled() { - jdiAssert(element().enabled(), Matchers.is(true)); - return this; - } - - @JDIAction("Assert that '{name}' has options") - public ChipsAssert assertChipsHasOptions(List options) { - jdiAssert(element().options(), Matchers.is(options)); - return this; - } - - @JDIAction("Assert that '{name}' has placeholder '{0}'") - public ChipsAssert assertChipsHasPlaceholder(String expected) { - jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); - return this; - } - - @JDIAction("Assert that '{name}' is multiple selection") - public ChipsAssert assertChipsIsMultiselectable() { - jdiAssert(element().isMultipleSelection(), Matchers.is(true)); - return this; - } -} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java new file mode 100644 index 0000000000..6c689809a8 --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java @@ -0,0 +1,33 @@ +package com.epam.jdi.light.angular.asserts; + +import com.epam.jdi.light.angular.elements.complex.ChipsDELETE; +import com.epam.jdi.light.asserts.generic.UIAssert; + +import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; + +public class ChipsAssertDELETE extends UIAssert { + +// @JDIAction("Assert that '{name}' enabled") +// public ChipsAssert assertChipsIsEnabled() { +// jdiAssert(element().enabled(), Matchers.is(true)); +// return this; +// } +// +// @JDIAction("Assert that '{name}' has options") +// public ChipsAssert assertChipsHasOptions(List options) { +// jdiAssert(element().options(), Matchers.is(options)); +// return this; +// } +// +// @JDIAction("Assert that '{name}' has placeholder '{0}'") +// public ChipsAssert assertChipsHasPlaceholder(String expected) { +// jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); +// return this; +// } +// +// @JDIAction("Assert that '{name}' is multiple selection") +// public ChipsAssert assertChipsIsMultiselectable() { +// jdiAssert(element().isMultipleSelection(), Matchers.is(true)); +// return this; +// } +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index de4f365127..455a57046d 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -10,29 +10,23 @@ public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage { -// @Override -// @JDIAction("Get if '{name}' is enabled") -// public boolean isEnabled() { -// return hasAttribute("disabled"); -// } - @JDIAction("Close '{name}'") public void close() { find("matChipRemove").click(); } - @JDIAction ("Get if '{name}' is removable") - public boolean isRemovable() { - return hasAttribute("matchipremove"); + @JDIAction("Get if '{name}' is removable") + public boolean removable() { + return hasAttribute("matchipremove"); } @JDIAction("Get if '{name} is focused'") - public boolean isFocused() { + public boolean focused() { return hasClass("cdk-focused"); } @JDIAction("Get if '{name} is selected'") - public boolean isSelected() { + public boolean selected() { return hasClass("mat-mdc-chip-selected"); } @@ -49,11 +43,6 @@ public void click() { core().click(); } -// @JDIAction("Get '{name}' text") -// public String getText() { -// return -// } - @Override public ChipAssert is() { return new ChipAssert().set(this); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index 74feff082b..e48c6df207 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -1,13 +1,13 @@ package com.epam.jdi.light.angular.elements.complex; import com.epam.jdi.light.angular.asserts.ChipGroupAssert; -import com.epam.jdi.light.angular.asserts.ChipsAssert; import com.epam.jdi.light.angular.elements.common.Chip; import com.epam.jdi.light.angular.elements.interfaces.IsGroupElement; 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.ICoreElement; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.Point; @@ -19,7 +19,7 @@ public class ChipGroup extends UIBaseElement implements IsGroupElement { private final String matOptions = "mat-option"; -// public String backdropField = "#chips-autocomplete-field"; + public String backdropField = "#chips-autocomplete-field"; @Override public List groupElements() { @@ -29,6 +29,8 @@ public List groupElements() { .collect(Collectors.toList()); } + + @Override public Chip getElement(String value) { return groupElements().stream() @@ -37,19 +39,25 @@ public Chip getElement(String value) { .get(); } + public boolean hasElement(String value) { + return groupElements().stream() + .anyMatch(chip -> chip.getText().equals(value)); + } + @Override public boolean isDisplayed() { return groupElements().stream() - .allMatch(chip -> chip.isDisabled() == true); - //return super.isDisplayed(); + .allMatch(ICoreElement::isDisplayed); } + + public void selectByText(String text) { getElement(text).click(); } public void setValue(String selectValue) { - core().click(); + inputField().click(); select(selectValue); } @@ -77,36 +85,11 @@ public String getPlaceholderForChips() { return inputField().hasAttribute(placeholder) ? inputField().getAttribute(placeholder) : ""; } -// @JDIAction("Collapse '{name}' chips autocomplete field") -// public void collapseField() { -// getBackdropField().core() -// .click(getPointOutsideField().getX(), getPointOutsideField().getY()); -// } - - -// @JDIAction("Get '{name}' chips by text '{0}'") -// public UIElement getChipsByText(String value) { -// UIElement element = null; -// for (UIElement e : getChips()) { -// if (e.getText().equalsIgnoreCase(value)) { -// element = e; -// } -// } -// return element; -// } -// -// -// -// -// @JDIAction("Select '{0}' in '{name}'") -// public void select(List values) { -// values.forEach(value -> { -// Chip chip = getElement(value); -// if (!chip.isSelected()) { -// chip.click(); -// } -// }); -// } + @JDIAction("Collapse '{name}' chips autocomplete field") + public void collapseField() { + getBackdropField().core() + .click(getPointOutsideField().getX(), getPointOutsideField().getY()); + } @JDIAction("Get options for '{name}'") public List options() { @@ -133,15 +116,15 @@ public ChipGroupAssert is() { return new ChipGroupAssert().set(this); } -// protected UIElement getBackdropField() { -// return new UIElement(By.cssSelector(backdropField)); -// } + protected UIElement getBackdropField() { + return new UIElement(By.cssSelector(backdropField)); + } -// protected Point getPointOutsideField() { -// UIElement uiElement = getBackdropField(); -// return new Point(uiElement.core().getRect(). -// getWidth() + 3, uiElement.core().getRect().getHeight() + 3); -// } + protected Point getPointOutsideField() { + UIElement uiElement = getBackdropField(); + return new Point(uiElement.core().getRect(). + getWidth() + 3, uiElement.core().getRect().getHeight() + 3); + } public UIElement inputField() { return find("input"); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java similarity index 94% rename from jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java rename to jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java index dbada89a45..516b8a7225 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java @@ -1,6 +1,6 @@ package com.epam.jdi.light.angular.elements.complex; -import com.epam.jdi.light.angular.asserts.ChipsAssert; +import com.epam.jdi.light.angular.asserts.ChipsAssertDELETE; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; import com.epam.jdi.light.elements.common.UIElement; @@ -19,7 +19,7 @@ * To see an example of Chips web element please visit https://material.angular.io/components/chips/overview. */ -public class Chips extends UIBaseElement implements HasPlaceholder, SetValue, IsInput { +public class ChipsDELETE extends UIBaseElement implements HasPlaceholder, SetValue, IsInput { public String backdropField = "#chips-autocomplete-field"; private final String matOptions = "mat-option"; @@ -120,21 +120,9 @@ public boolean isMultipleSelection() { return attr("aria-multiselectable").equals("true"); } - - - - - - - - - - - - @Override - public ChipsAssert is() { - return new ChipsAssert().set(this); + public ChipsAssertDELETE is() { + return new ChipsAssertDELETE().set(this); } protected UIElement getBackdropField() { From 9a846afc3e87f95597e107ffe9bb3dbd5412e249 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Thu, 2 Nov 2023 17:16:40 +0300 Subject: [PATCH 03/12] rebase --- .../tests/elements/complex/ChipsTests.java | 73 +++++--- .../jdi/light/angular/asserts/ChipAssert.java | 15 +- .../angular/asserts/ChipGroupAssert.java | 36 ++-- .../angular/asserts/ChipsAssertDELETE.java | 33 ---- .../light/angular/elements/common/Chip.java | 27 ++- .../angular/elements/complex/ChipGroup.java | 54 +++--- .../angular/elements/complex/ChipsDELETE.java | 165 ------------------ 7 files changed, 140 insertions(+), 263 deletions(-) delete mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java delete mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java index 3d47703ef8..32d0a46755 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java @@ -1,5 +1,6 @@ package io.github.epam.angular.tests.elements.complex; +import com.epam.jdi.light.angular.elements.enums.AngularColors; import io.github.com.pages.ChipsPage; import io.github.epam.TestsInit; import org.testng.annotations.BeforeMethod; @@ -12,8 +13,10 @@ import static com.jdiai.tools.Timer.waitCondition; import static io.github.com.StaticSite.chipsPage; import static io.github.com.pages.ChipsPage.autocompleteChips; +import static io.github.com.pages.ChipsPage.avatarChips; import static io.github.com.pages.ChipsPage.basicChips; import static io.github.com.pages.ChipsPage.disabledChips; +import static io.github.com.pages.ChipsPage.errorChips; import static io.github.com.pages.ChipsPage.inputChips; import static io.github.com.pages.ChipsPage.multipleChips; import static io.github.com.pages.ChipsPage.stackedChips; @@ -43,7 +46,7 @@ public void before() { chipsPage.checkOpened(); } - @Test + @Test(description = "Test verifies that chip group is selectable") public void basicChipsTest() { basicChips.show(); basicChips.is().displayed(); @@ -54,7 +57,7 @@ public void basicChipsTest() { ChipsPage.basicSelectedValue.has().text(format("You clicked: %s", WARNFISH)); } - @Test + @Test(description = "Test verifies that chip group is vertical") public void stackedChipsTest() { stackedChips.show(); stackedChips.is().displayed(); @@ -67,32 +70,39 @@ public void stackedChipsTest() { stackedSelectedValue.has().text(format("You clicked: %s", WARN)); } - @Test + @Test(description = "Test check chips colors") + public void chipsColorTest() { + stackedChips.show(); + stackedChips.is().displayed(); + stackedChips.getElement(PRIMARY).is().color(AngularColors.MAT_PRIMARY); + stackedChips.getElement(ACCENT).is().color(AngularColors.MAT_ACCENT); + stackedChips.getElement(WARN).is().color(AngularColors.MAT_WARN); + } + + @Test(description = "Test checks the operation of the autocomplete in chips group") public void chipsAutocompleteTest() { String[] expectedValuesArray = { "Apple", "Lemon", "Lime", "Orange", "Strawberry"}; List expectedValues = Arrays.asList(expectedValuesArray); + autocompleteChips.show(); autocompleteChips.is().displayed(); - autocompleteChips.has().assertChipsHasPlaceholder("New Fruit..."); - autocompleteChips.has().assertChipsHasOptions(expectedValues); + autocompleteChips.has().placeholder("New Fruit..."); + autocompleteChips.has().options(expectedValues); - autocompleteChips.setValue(LEMON); + autocompleteChips.select(LEMON); autocompleteChips.collapseField(); autocompleteChips.is().hasElement(LEMON); - autocompleteChips.setValue(APPLE); + autocompleteChips.select(APPLE); autocompleteChips.collapseField(); autocompleteChips.is().hasElement(APPLE); - autocompleteChips.setValue(LIME); - autocompleteChips.collapseField(); - autocompleteChips.is().hasElement(LIME); } - @Test + @Test(description = "Test checks the input field in chips group") public void chipsWithInputTest() { inputChips.show(); inputChips.is().displayed(); - inputChips.has().assertChipsHasPlaceholder(PLACEHOLDER); + inputChips.has().placeholder(PLACEHOLDER); inputChips.input("Kiwi" + "\n"); inputChips.input("Melon"); inputChips.clearInputField(); @@ -101,24 +111,39 @@ public void chipsWithInputTest() { inputChips.is().hasElement("Rockmelon"); } - @Test + @Test(description = "Test checks that chips can be removed") public void chipsRemovableTest() { inputChips.show(); inputChips.is().displayed(); inputChips.getElement("Lemon").is().removable(); inputChips.getElement("Lemon").close(); - inputChips.getElement("Lemon"); } - @Test - public void chipDisabledTest() { - disabledChips.groupElements().get(0).is().disabled(); - disabledChips.groupElements().get(1).is().disabled(); - disabledChips.groupElements().get(2).is().disabled(); + @Test(description = "Test checks that chips can be focused") + public void chipFocusedTest() { + inputChips.show(); + inputChips.is().displayed(); + inputChips.getElement("Apple").click(); + inputChips.getElement("Apple").is().focused(); + inputChips.getElement("Lime").click(); + inputChips.getElement("Lime").is().focused(); + } + @Test(description = "Test checks that chips has avatar image") + public void chipAvatarTest() { + String expectedSrc = "https://material.angular.io/assets/img/examples/shiba1.jpg"; + avatarChips.show(); + avatarChips.getElement("Dog one").leadingIcon().is().src(expectedSrc); } - @Test + @Test(description = "Test checks that chips can be disabled") + public void chipDisabledTest() { + disabledChips.show(); + disabledChips.is().displayed(); + disabledChips.is().disabled(); + } + + @Test(description = "Test checks chips multiply selection") public void chipsMultipleSelectionTest() { multipleChips.show(); multipleChips.is().displayed(); @@ -128,4 +153,12 @@ public void chipsMultipleSelectionTest() { multipleChips.getElement("multiple color none").is().selected(); multipleChips.getElement("multiple color Primary").is().selected(); } + + @Test(description = "Test checks that chips has error state") + public void chipsErrorState() { + errorChips.show(); + errorChips.is().displayed(); + errorChips.input("Kiwi" + "\n"); + errorChips.has().errorState(); + } } \ No newline at end of file diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java index 44110e7586..25c7e3ccaf 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java @@ -1,6 +1,7 @@ package com.epam.jdi.light.angular.asserts; import com.epam.jdi.light.angular.elements.common.Chip; +import com.epam.jdi.light.angular.elements.enums.AngularColors; import com.epam.jdi.light.asserts.generic.UIAssert; import com.epam.jdi.light.common.JDIAction; import org.hamcrest.Matchers; @@ -9,16 +10,26 @@ public class ChipAssert extends UIAssert { - @JDIAction("Assert that '{name}' enabled") + @JDIAction("Assert that '{name}' is enabled") public ChipAssert selected() { jdiAssert(element().selected(), Matchers.is(true)); return this; } - @JDIAction("Assert that '{name}' ") + @JDIAction("Assert that '{name}' is removable ") public ChipAssert removable() { jdiAssert(element().removable(), Matchers.is(true)); return this; } + @JDIAction("Assert that '{name}' has '{0}' color") + public ChipAssert color(AngularColors color) { + return cssClass(color.getColor()); + } + + @JDIAction("Assert that '{name}' is focused ") + public ChipAssert focused() { + jdiAssert(element().focused(), Matchers.is(true)); + return this; + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java index 845f27ea12..50bea00972 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java @@ -11,39 +11,53 @@ public class ChipGroupAssert extends UIAssert { - @JDIAction("") - public ChipGroupAssert vertical(){ - jdiAssert(element().getOrientation(), Matchers.is("vertical")); + @Override + @JDIAction("Assert that '{name}' is displayed") + public ChipGroupAssert displayed() { + jdiAssert(element().isDisplayed() ? "displayed" : "hidden", Matchers.is("displayed")); + return this; + } + + @Override + @JDIAction("Assert that '{name}' is enabled") + public ChipGroupAssert enabled() { + jdiAssert(element().isEnabled() ? "enabled" : "disabled", Matchers.is("enabled")); + return this; + } + + @JDIAction("Assert that '{name}' aria-orientation is vertical") + public ChipGroupAssert vertical() { + jdiAssert(element().isVertical(), Matchers.is(true)); return this; } @JDIAction("Assert that '{name}' has placeholder '{0}'") - public ChipGroupAssert assertChipsHasPlaceholder(String expected) { + public ChipGroupAssert placeholder(String expected) { jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); return this; } @JDIAction("Assert that '{name}' has options") - public ChipGroupAssert assertChipsHasOptions(List options) { + public ChipGroupAssert options(List options) { jdiAssert(element().options(), Matchers.is(options)); return this; } + @JDIAction("Assert that '{name}' has multiple select options") public ChipGroupAssert multiselectable() { - jdiAssert(element().isMultiselectable(), Matchers.is("true")); + jdiAssert(element().multiselectable(), Matchers.is("true")); return this; } + @JDIAction("Assert that '{name}' has '{0}' element") public ChipGroupAssert hasElement(String expected) { jdiAssert(element().hasElement(expected), Matchers.is(true)); return this; } - @JDIAction("Assert that '{name}' is displayed") - public ChipGroupAssert displayed() { - jdiAssert(element().isDisplayed() ? "displayed" : "hidden", Matchers.is("displayed")); + @JDIAction("Assert that '{name}' has error state") + public ChipGroupAssert errorState() { + jdiAssert(element().errorState(), Matchers.is(true)); return this; } - - } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java deleted file mode 100644 index 6c689809a8..0000000000 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssertDELETE.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.epam.jdi.light.angular.asserts; - -import com.epam.jdi.light.angular.elements.complex.ChipsDELETE; -import com.epam.jdi.light.asserts.generic.UIAssert; - -import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; - -public class ChipsAssertDELETE extends UIAssert { - -// @JDIAction("Assert that '{name}' enabled") -// public ChipsAssert assertChipsIsEnabled() { -// jdiAssert(element().enabled(), Matchers.is(true)); -// return this; -// } -// -// @JDIAction("Assert that '{name}' has options") -// public ChipsAssert assertChipsHasOptions(List options) { -// jdiAssert(element().options(), Matchers.is(options)); -// return this; -// } -// -// @JDIAction("Assert that '{name}' has placeholder '{0}'") -// public ChipsAssert assertChipsHasPlaceholder(String expected) { -// jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); -// return this; -// } -// -// @JDIAction("Assert that '{name}' is multiple selection") -// public ChipsAssert assertChipsIsMultiselectable() { -// jdiAssert(element().isMultipleSelection(), Matchers.is(true)); -// return this; -// } -} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index 455a57046d..83e55b96f2 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -7,17 +7,29 @@ import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; import com.epam.jdi.light.elements.interfaces.base.HasClick; +import com.epam.jdi.light.ui.html.elements.common.Image; public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage { + + @JDIAction("Get if '{name} is selected'") + public boolean selected() { + return hasClass("mat-mdc-chip-selected"); + } + @JDIAction("Close '{name}'") public void close() { - find("matChipRemove").click(); + find("[matChipRemove]").click(); } @JDIAction("Get if '{name}' is removable") public boolean removable() { - return hasAttribute("matchipremove"); + return find("[matChipRemove]").isDisplayed(); + } + + @JDIAction("Get if '{name}' background-color") + public String getBackgroundColor() { + return css("background-color"); } @JDIAction("Get if '{name} is focused'") @@ -25,22 +37,19 @@ public boolean focused() { return hasClass("cdk-focused"); } - @JDIAction("Get if '{name} is selected'") - public boolean selected() { - return hasClass("mat-mdc-chip-selected"); - } - @JDIAction("Get if '{name} checkmark is visible'") public boolean showCheckMark() { return find("mdc-evolution-chip__checkmark").isVisible(); } + @JDIAction("Get '{name} label text") public String getText() { return find(".mdc-evolution-chip__text-label").getText(); } - public void click() { - core().click(); + @JDIAction("Get '{name} avatar image") + public Image leadingIcon() { + return new Image().setCore(Image.class, find("[matchipavatar]")); } @Override diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index e48c6df207..dc20c172b2 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -2,6 +2,7 @@ import com.epam.jdi.light.angular.asserts.ChipGroupAssert; import com.epam.jdi.light.angular.elements.common.Chip; +import com.epam.jdi.light.angular.elements.interfaces.HasOrientation; import com.epam.jdi.light.angular.elements.interfaces.IsGroupElement; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; @@ -16,12 +17,13 @@ import java.util.List; import java.util.stream.Collectors; -public class ChipGroup extends UIBaseElement implements IsGroupElement { +public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation { private final String matOptions = "mat-option"; public String backdropField = "#chips-autocomplete-field"; @Override + @JDIAction("Get list of '{name}' items") public List groupElements() { core().timer().wait(() -> core().finds(".mat-mdc-chip").isDisplayed()); return core().finds(".mat-mdc-chip").stream() @@ -29,9 +31,8 @@ public List groupElements() { .collect(Collectors.toList()); } - - @Override + @JDIAction("Get {0} element from '{name}'") public Chip getElement(String value) { return groupElements().stream() .filter(element -> element.getText().equals(value)) @@ -39,47 +40,56 @@ public Chip getElement(String value) { .get(); } + @JDIAction("Get if {0} element exist in '{name}'") public boolean hasElement(String value) { return groupElements().stream() .anyMatch(chip -> chip.getText().equals(value)); } @Override + @JDIAction("Get if all chips elements in '{name}' is displayed") public boolean isDisplayed() { return groupElements().stream() .allMatch(ICoreElement::isDisplayed); } + @Override + @JDIAction("Get if all chips elements in '{name}' is enabled") + public boolean isEnabled() { + return groupElements().stream() + .allMatch(ICoreElement::isEnabled); + } - + @JDIAction("Select chip element in '{name}' by '{0}'") public void selectByText(String text) { getElement(text).click(); } - public void setValue(String selectValue) { - inputField().click(); - select(selectValue); + @JDIAction("Get '{name}' input field") + public UIElement inputField() { + return find("input"); } - @JDIAction("'{name}' input '{0}' value") + @JDIAction("'{name}' input field input '{0}' value") public void input(String value) { inputField().input(value); } - @JDIAction("Clear value from '{name}'") + @JDIAction("Clear value from '{name}' input field") public void clearInputField() { inputField().sendKeys(Keys.CONTROL + "a"); inputField().sendKeys(Keys.DELETE); } - @JDIAction("Select value '{0}' for '{name}'") + @JDIAction("Select value '{0}' for '{name}' autocomplete") public void select(String value) { if (value == null) return; + inputField().click(); WebList options = getOptions(this.matOptions); options.get(value).click(); } - @JDIAction("Get placeholder for '{name}'") + @JDIAction("Get placeholder for '{name}' input field") public String getPlaceholderForChips() { String placeholder = "placeholder"; return inputField().hasAttribute(placeholder) ? inputField().getAttribute(placeholder) : ""; @@ -91,24 +101,26 @@ public void collapseField() { .click(getPointOutsideField().getX(), getPointOutsideField().getY()); } - @JDIAction("Get options for '{name}'") + @JDIAction("Get options for '{name}' autocomplete field") public List options() { getItems(); return getValues(); } - @JDIAction("") - public String getOrientation() { - return hasClass("mat-chip-list-stacked") ? "vertical" : "horizontal"; + @Override + @JDIAction("Get if '{name}' is vertical") + public boolean isVertical() { + return core().attr("class").contains("mat-chip-list-stacked"); } - @JDIAction("") - public String isMultiselectable() { + @JDIAction("Get if '{namr}' has multiple selection") + public String multiselectable() { return attr("aria-multiselectable"); } - private WebList getChips() { - return this.finds(".mat-mdc-chip"); + @JDIAction("Get if '{namr}' has error state") + public boolean errorState() { + return core().hasClass("mat-form-field-invalid"); } @Override @@ -126,10 +138,6 @@ protected Point getPointOutsideField() { getWidth() + 3, uiElement.core().getRect().getHeight() + 3); } - public UIElement inputField() { - return find("input"); - } - private WebList getOptions(String css) { return new WebList(By.cssSelector(css)); } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java deleted file mode 100644 index 516b8a7225..0000000000 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipsDELETE.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.epam.jdi.light.angular.elements.complex; - -import com.epam.jdi.light.angular.asserts.ChipsAssertDELETE; -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.HasPlaceholder; -import com.epam.jdi.light.elements.interfaces.base.SetValue; -import com.epam.jdi.light.elements.interfaces.common.IsInput; -import org.openqa.selenium.By; -import org.openqa.selenium.Keys; -import org.openqa.selenium.Point; - -import java.util.ArrayList; -import java.util.List; - -/** - * To see an example of Chips web element please visit https://material.angular.io/components/chips/overview. - */ - -public class ChipsDELETE extends UIBaseElement implements HasPlaceholder, SetValue, IsInput { - - public String backdropField = "#chips-autocomplete-field"; - private final String matOptions = "mat-option"; - - @JDIAction("Click '{name}' chips by text '{0}'") - public void clickChipsByTextValue(String value) { - getChipsByText(value).click(); - } - - @JDIAction("Click '{name}'") - public void click() { - core().click(); - } - - @JDIAction("Get options for '{name}'") - public List options() { - getItems(); - return getValues(); - } - - @JDIAction("Get '{name}' chips by text '{0}'") - public UIElement getChipsByText(String value) { - UIElement element = null; - for (UIElement e : getChips()) { - if (e.getText().equalsIgnoreCase(value)) { - element = e; - } - } - return element; - } - - public UIElement getChipsByIndex(int index) { - return getChips().get(index); - } - - @JDIAction("'{name}' has text '{0}'") - public boolean chipsHasText(String value) { - return getChipsByText(value).getText().equalsIgnoreCase(value); - } - - public boolean enabled() { - return !isDisabled(); - } - - @JDIAction("Get placeholder for '{name}'") - public String getPlaceholderForChips() { - String placeholder = "placeholder"; - return core().hasAttribute(placeholder) ? core().getAttribute(placeholder) : ""; - } - - @JDIAction("'{name}' input '{0}' value") - public void input(String value) { - core().input(value); - } - - @JDIAction("Select value '{0}' for '{name}'") - public void select(String value) { - if (value == null) return; - WebList options = getOptions(this.matOptions); - options.get(value).click(); - } - - @Override - public String getValue() { - return text(); - } - - public void setValue(String inputValue, String selectValue) { - input(inputValue); - select(selectValue); - } - - @Override - public void setValue(String selectValue) { - click(); - select(selectValue); - } - - @JDIAction("Clear value from '{name}'") - public void clearInputField() { - sendKeys(Keys.CONTROL + "a"); - sendKeys(Keys.DELETE); - } - - @JDIAction("Collapse '{name}' chips autocomplete field") - public void collapseField() { - getBackdropField().core() - .click(getPointOutsideField().getX(), getPointOutsideField().getY()); - } - - @JDIAction("") - public String getOrientation() { - return hasClass("mat-mdc-chip-set-stacked") ? "vertical" : "horizontal"; - } - - @JDIAction("") - public boolean isMultipleSelection() { - return attr("aria-multiselectable").equals("true"); - } - - @Override - public ChipsAssertDELETE is() { - return new ChipsAssertDELETE().set(this); - } - - protected UIElement getBackdropField() { - return new UIElement(By.cssSelector(backdropField)); - } - - protected Point getPointOutsideField() { - UIElement uiElement = getBackdropField(); - return new Point(uiElement.core().getRect(). - getWidth() + 3, uiElement.core().getRect().getHeight() + 3); - } - - private WebList getChips() { - return this.finds(".mat-mdc-chip"); - } - - private WebList getOptions(String css) { - return new WebList(By.cssSelector(css)); - } - - private WebList getItems() { - click(); - WebList options = getOptions(matOptions); - click(); - return options; - } - - private List getValues() { - List values = new ArrayList<>(); - WebList options = getOptions(this.matOptions); - options.forEach(option -> values.add(option.getValue())); - return values; - } - - @Override - public String getText() { - return getChipsByIndex(1).find(".mdc-evolution-chip__text-label").getText(); - } - -} From aad39918766f2bdf13ba5da572f53185a5a59ac3 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 20 Nov 2023 18:44:36 +0300 Subject: [PATCH 04/12] Added corrections according to comments --- .../tests/elements/complex/ChipsTests.java | 72 +++++++++++++------ .../jdi/light/angular/asserts/ChipAssert.java | 32 ++++++++- .../angular/asserts/ChipGroupAssert.java | 12 ++++ .../light/angular/elements/common/Chip.java | 25 +++---- .../angular/elements/complex/ChipGroup.java | 35 +++++---- 5 files changed, 128 insertions(+), 48 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java index 32d0a46755..3f634808d8 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java @@ -3,7 +3,7 @@ import com.epam.jdi.light.angular.elements.enums.AngularColors; import io.github.com.pages.ChipsPage; import io.github.epam.TestsInit; -import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.Arrays; @@ -17,10 +17,10 @@ import static io.github.com.pages.ChipsPage.basicChips; import static io.github.com.pages.ChipsPage.disabledChips; import static io.github.com.pages.ChipsPage.errorChips; +import static io.github.com.pages.ChipsPage.highlightedChips; import static io.github.com.pages.ChipsPage.inputChips; import static io.github.com.pages.ChipsPage.multipleChips; import static io.github.com.pages.ChipsPage.stackedChips; -import static io.github.com.pages.ChipsPage.stackedSelectedValue; public class ChipsTests extends TestsInit { @@ -39,7 +39,7 @@ public class ChipsTests extends TestsInit { private static final String LEMON = "Lemon"; private static final String LIME = "Lime"; - @BeforeMethod + @BeforeClass public void before() { chipsPage.open(); waitCondition(() -> chipsPage.isOpened()); @@ -49,10 +49,11 @@ public void before() { @Test(description = "Test verifies that chip group is selectable") public void basicChipsTest() { basicChips.show(); - basicChips.is().displayed(); + basicChips.is().displayed().and().enabled(); basicChips.selectByText(TWOFISH); - basicChips.selectByText(PRIMARYFISH); + basicChips.getElement(TWOFISH).is().selected(); basicChips.selectByText(WARNFISH); + basicChips.getElement(WARNFISH).is().selected(); ChipsPage.basicSelectedValue.has().text(format("You clicked: %s", WARNFISH)); } @@ -60,23 +61,35 @@ public void basicChipsTest() { @Test(description = "Test verifies that chip group is vertical") public void stackedChipsTest() { stackedChips.show(); - stackedChips.is().displayed(); - stackedChips.is().vertical(); - stackedChips.selectByText(NONE); - stackedChips.selectByText(PRIMARY); - stackedChips.selectByText(ACCENT); - stackedChips.selectByText(WARN); + stackedChips.is().displayed().and().vertical(); + } - stackedSelectedValue.has().text(format("You clicked: %s", WARN)); + @Test(description = "Test verifies that chip group is not vertical") + public void horizontalChipsTest() { + basicChips.show(); + basicChips.is().displayed().and().notVertical(); } @Test(description = "Test check chips colors") public void chipsColorTest() { - stackedChips.show(); - stackedChips.is().displayed(); - stackedChips.getElement(PRIMARY).is().color(AngularColors.MAT_PRIMARY); - stackedChips.getElement(ACCENT).is().color(AngularColors.MAT_ACCENT); - stackedChips.getElement(WARN).is().color(AngularColors.MAT_WARN); + highlightedChips.show(); + highlightedChips.is().displayed(); + highlightedChips.getElement("Highlighted color Primary").is().color(AngularColors.PRIMARY) + .and().highlighted(); + highlightedChips.getElement("Highlighted color Accent").is().color(AngularColors.ACCENT) + .and().highlighted(); + ; + highlightedChips.getElement("Highlighted color Warn").is().color(AngularColors.WARN) + .and().highlighted(); + ; + } + + @Test(description = "Test verifies that chips isn't highlighted") + public void chipsNotHighlightedTest() { + basicChips.show(); + basicChips.is().displayed().and().enabled(); + basicChips.getElement(TWOFISH).is().notHighlighted(); + basicChips.getElement(WARNFISH).is().notHighlighted(); } @Test(description = "Test checks the operation of the autocomplete in chips group") @@ -119,6 +132,13 @@ public void chipsRemovableTest() { inputChips.getElement("Lemon").close(); } + @Test(description = "Test checks that chips can't be removed") + public void chipsNotRemovableTest() { + basicChips.show(); + basicChips.is().displayed(); + basicChips.getElement(WARNFISH).is().notRemovable(); + } + @Test(description = "Test checks that chips can be focused") public void chipFocusedTest() { inputChips.show(); @@ -127,6 +147,7 @@ public void chipFocusedTest() { inputChips.getElement("Apple").is().focused(); inputChips.getElement("Lime").click(); inputChips.getElement("Lime").is().focused(); + inputChips.getElement("Apple").is().notFocused(); } @Test(description = "Test checks that chips has avatar image") @@ -139,8 +160,7 @@ public void chipAvatarTest() { @Test(description = "Test checks that chips can be disabled") public void chipDisabledTest() { disabledChips.show(); - disabledChips.is().displayed(); - disabledChips.is().disabled(); + disabledChips.is().displayed().and().disabled(); } @Test(description = "Test checks chips multiply selection") @@ -154,6 +174,18 @@ public void chipsMultipleSelectionTest() { multipleChips.getElement("multiple color Primary").is().selected(); } + @Test(description = "Test checks chips isn't multiply selection") + public void chipsNotMultipleSelectionTest() { + basicChips.show(); + basicChips.is().displayed(); + basicChips.is().notMultiselectable(); + basicChips.selectByText(TWOFISH); + basicChips.selectByText(WARNFISH); + basicChips.getElement(TWOFISH).is().deselected(); + basicChips.getElement(WARNFISH).is().selected(); + + } + @Test(description = "Test checks that chips has error state") public void chipsErrorState() { errorChips.show(); @@ -161,4 +193,4 @@ public void chipsErrorState() { errorChips.input("Kiwi" + "\n"); errorChips.has().errorState(); } -} \ No newline at end of file +} diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java index 25c7e3ccaf..923f29b2c5 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java @@ -16,15 +16,27 @@ public ChipAssert selected() { return this; } + @JDIAction("Assert that '{name}' is enabled") + public ChipAssert deselected() { + jdiAssert(element().selected(), Matchers.is(false)); + return this; + } + @JDIAction("Assert that '{name}' is removable ") public ChipAssert removable() { jdiAssert(element().removable(), Matchers.is(true)); return this; } + @JDIAction("Assert that '{name}' is removable ") + public ChipAssert notRemovable() { + jdiAssert(element().removable(), Matchers.is(false)); + return this; + } + @JDIAction("Assert that '{name}' has '{0}' color") public ChipAssert color(AngularColors color) { - return cssClass(color.getColor()); + return cssClass(color.getStyle()); } @JDIAction("Assert that '{name}' is focused ") @@ -32,4 +44,22 @@ public ChipAssert focused() { jdiAssert(element().focused(), Matchers.is(true)); return this; } + + @JDIAction("Assert that '{name}' is highlighted ") + public ChipAssert highlighted() { + jdiAssert(element().highlighted(), Matchers.is(true)); + return this; + } + + @JDIAction("Assert that '{name}' isn't highlighted ") + public ChipAssert notHighlighted() { + jdiAssert(element().highlighted(), Matchers.is(false)); + return this; + } + + @JDIAction("Assert that '{name}' isn't focused ") + public ChipAssert notFocused() { + jdiAssert(element().focused(), Matchers.is(false)); + return this; + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java index 50bea00972..04e17bd97a 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java @@ -31,6 +31,12 @@ public ChipGroupAssert vertical() { return this; } + @JDIAction("Assert that '{name}' aria-orientation is not vertical") + public ChipGroupAssert notVertical() { + jdiAssert(element().isVertical(), Matchers.is(false)); + return this; + } + @JDIAction("Assert that '{name}' has placeholder '{0}'") public ChipGroupAssert placeholder(String expected) { jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); @@ -49,6 +55,12 @@ public ChipGroupAssert multiselectable() { return this; } + @JDIAction("Assert that '{name}' has multiple select options") + public ChipGroupAssert notMultiselectable() { + jdiAssert(element().multiselectable(), Matchers.is("false")); + return this; + } + @JDIAction("Assert that '{name}' has '{0}' element") public ChipGroupAssert hasElement(String expected) { jdiAssert(element().hasElement(expected), Matchers.is(true)); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index 83e55b96f2..b78211092c 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -11,6 +11,7 @@ public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage { + public static final String MAT_CHIP_REMOVE = "[matChipRemove]"; @JDIAction("Get if '{name} is selected'") public boolean selected() { @@ -19,35 +20,35 @@ public boolean selected() { @JDIAction("Close '{name}'") public void close() { - find("[matChipRemove]").click(); + find(MAT_CHIP_REMOVE).click(); } @JDIAction("Get if '{name}' is removable") public boolean removable() { - return find("[matChipRemove]").isDisplayed(); + return find(MAT_CHIP_REMOVE).isDisplayed(); } - @JDIAction("Get if '{name}' background-color") - public String getBackgroundColor() { - return css("background-color"); - } - - @JDIAction("Get if '{name} is focused'") + @JDIAction("Get if '{name}' is focused") public boolean focused() { return hasClass("cdk-focused"); } - @JDIAction("Get if '{name} checkmark is visible'") - public boolean showCheckMark() { + @JDIAction("Get if '{name}' checkmark is visible") + public boolean hasCheckMark() { return find("mdc-evolution-chip__checkmark").isVisible(); } - @JDIAction("Get '{name} label text") + @JDIAction("Get if '{name}' is highlighted") + public boolean highlighted() { + return hasClass("mat-mdc-chip-highlighted"); + } + + @JDIAction("Get '{name}' label text") public String getText() { return find(".mdc-evolution-chip__text-label").getText(); } - @JDIAction("Get '{name} avatar image") + @JDIAction("Get '{name}' avatar image") public Image leadingIcon() { return new Image().setCore(Image.class, find("[matchipavatar]")); } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index dc20c172b2..01e5cc7642 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -19,14 +19,14 @@ public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation { + public static final String CHIP_LOCATOR = ".mat-mdc-chip"; private final String matOptions = "mat-option"; - public String backdropField = "#chips-autocomplete-field"; @Override @JDIAction("Get list of '{name}' items") public List groupElements() { - core().timer().wait(() -> core().finds(".mat-mdc-chip").isDisplayed()); - return core().finds(".mat-mdc-chip").stream() + core().timer().wait(() -> core().finds(CHIP_LOCATOR).isDisplayed()); + return core().finds(CHIP_LOCATOR).stream() .map(listItem -> new Chip().setCore(Chip.class, listItem)) .collect(Collectors.toList()); } @@ -62,7 +62,18 @@ public boolean isEnabled() { @JDIAction("Select chip element in '{name}' by '{0}'") public void selectByText(String text) { - getElement(text).click(); + Chip chip = getElement(text); + if (!chip.selected()){ + chip.click(); + } + } + + @JDIAction("Deselect chip element in '{name}' by '{0}'") + public void deselectByText(String text) { + Chip chip = getElement(text); + if (chip.selected()){ + chip.click(); + } } @JDIAction("Get '{name}' input field") @@ -97,8 +108,7 @@ public String getPlaceholderForChips() { @JDIAction("Collapse '{name}' chips autocomplete field") public void collapseField() { - getBackdropField().core() - .click(getPointOutsideField().getX(), getPointOutsideField().getY()); + core().click(getPointOutsideField().getX(), getPointOutsideField().getY()); } @JDIAction("Get options for '{name}' autocomplete field") @@ -113,12 +123,12 @@ public boolean isVertical() { return core().attr("class").contains("mat-chip-list-stacked"); } - @JDIAction("Get if '{namr}' has multiple selection") + @JDIAction("Get if '{name}' has multiple selection") public String multiselectable() { return attr("aria-multiselectable"); } - @JDIAction("Get if '{namr}' has error state") + @JDIAction("Get if '{name}' has error state") public boolean errorState() { return core().hasClass("mat-form-field-invalid"); } @@ -128,14 +138,9 @@ public ChipGroupAssert is() { return new ChipGroupAssert().set(this); } - protected UIElement getBackdropField() { - return new UIElement(By.cssSelector(backdropField)); - } - protected Point getPointOutsideField() { - UIElement uiElement = getBackdropField(); - return new Point(uiElement.core().getRect(). - getWidth() + 3, uiElement.core().getRect().getHeight() + 3); + return new Point(core().getRect(). + getWidth() + 3, core().getRect().getHeight() + 3); } private WebList getOptions(String css) { From c402ce061e7b5b0c8226cf7cebe74ee90a1e71ec Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 20 Nov 2023 18:56:53 +0300 Subject: [PATCH 05/12] fix checkstyle error --- .../epam/jdi/light/angular/elements/complex/ChipGroup.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index 01e5cc7642..98e5d46d68 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -63,7 +63,7 @@ public boolean isEnabled() { @JDIAction("Select chip element in '{name}' by '{0}'") public void selectByText(String text) { Chip chip = getElement(text); - if (!chip.selected()){ + if (!chip.selected()) { chip.click(); } } @@ -71,7 +71,7 @@ public void selectByText(String text) { @JDIAction("Deselect chip element in '{name}' by '{0}'") public void deselectByText(String text) { Chip chip = getElement(text); - if (chip.selected()){ + if (chip.selected()) { chip.click(); } } From a74c6e47f044ff2cb1702ee8750b522fe9ee12f0 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 20 Nov 2023 19:06:00 +0300 Subject: [PATCH 06/12] deleted unusual class ChipsSection --- .../src/main/java/io/github/com/pages/sections/ChipsSection.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/ChipsSection.java deleted file mode 100644 index e69de29bb2..0000000000 From 2b4178ec06e8f27609b50a10eee673d415c4e5ce Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Tue, 21 Nov 2023 11:10:42 +0300 Subject: [PATCH 07/12] Amended in accordance with the comments --- .../elements/ChipGroupWithAutocomlete.java | 13 ++++ .../java/io/github/com/pages/ChipsPage.java | 7 +- .../tests/elements/complex/ChipsTests.java | 59 +++++++-------- .../jdi/light/angular/asserts/ChipAssert.java | 6 ++ .../angular/asserts/ChipGroupAssert.java | 14 ---- .../light/angular/elements/common/Chip.java | 18 +++-- .../elements/complex/AutoComplete.java | 1 + .../angular/elements/complex/ChipGroup.java | 75 +------------------ .../angular/elements/interfaces/HasIcon.java | 2 +- .../angular/elements/interfaces/HasImage.java | 3 +- 10 files changed, 63 insertions(+), 135 deletions(-) create mode 100644 jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java b/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java new file mode 100644 index 0000000000..cef40f41fc --- /dev/null +++ b/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java @@ -0,0 +1,13 @@ +package io.github.com.custom.elements; + +import com.epam.jdi.light.angular.elements.complex.AutoComplete; +import com.epam.jdi.light.angular.elements.complex.ChipGroup; +import com.epam.jdi.light.common.JDIAction; + +public class ChipGroupWithAutocomlete extends ChipGroup { + + @JDIAction("Get '{name}' input field") + public AutoComplete inputField() { + return new AutoComplete().setCore(AutoComplete.class, find("input")); + } +} diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java index c969346c4d..4d402e4863 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/ChipsPage.java @@ -3,6 +3,7 @@ import com.epam.jdi.light.angular.elements.complex.ChipGroup; import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; import com.epam.jdi.light.ui.html.elements.common.Text; +import io.github.com.custom.elements.ChipGroupWithAutocomlete; public class ChipsPage extends NewAngularPage { @@ -13,10 +14,10 @@ public class ChipsPage extends NewAngularPage { public static ChipGroup stackedChips; @UI("#chips-autocomplete-field") - public static ChipGroup autocompleteChips; + public static ChipGroupWithAutocomlete autocompleteChips; @UI("#chips-with-input-field") - public static ChipGroup inputChips; + public static ChipGroupWithAutocomlete inputChips; @UI("#chips-with-form-control") public static ChipGroup formControlChips; @@ -43,7 +44,7 @@ public class ChipsPage extends NewAngularPage { public static ChipGroup multipleChips; @UI("#chips-with-error-state") - public static ChipGroup errorChips; + public static ChipGroupWithAutocomlete errorChips; @UI("#basic-chips-label") public static Text basicSelectedValue; diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java index 3f634808d8..876b90d250 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java @@ -24,20 +24,16 @@ public class ChipsTests extends TestsInit { - private static final String ONEFISH = "One fish"; private static final String TWOFISH = "Two fish"; - private static final String PRIMARYFISH = "Primary fish"; private static final String WARNFISH = "Warn fish"; - private static final String NONE = "none"; - private static final String PRIMARY = "Primary"; - private static final String ACCENT = "Accent"; - private static final String WARN = "Warn"; - - private static final String PLACEHOLDER = "New fruit..."; private static final String APPLE = "Apple"; private static final String LEMON = "Lemon"; private static final String LIME = "Lime"; + private static final String KIWI = "Kiwi"; + private static final String ROCKMELON = "Rockmelon"; + private static final String MELON = "Melon"; + @BeforeClass public void before() { @@ -78,10 +74,8 @@ public void chipsColorTest() { .and().highlighted(); highlightedChips.getElement("Highlighted color Accent").is().color(AngularColors.ACCENT) .and().highlighted(); - ; highlightedChips.getElement("Highlighted color Warn").is().color(AngularColors.WARN) .and().highlighted(); - ; } @Test(description = "Test verifies that chips isn't highlighted") @@ -95,19 +89,17 @@ public void chipsNotHighlightedTest() { @Test(description = "Test checks the operation of the autocomplete in chips group") public void chipsAutocompleteTest() { String[] expectedValuesArray = { - "Apple", "Lemon", "Lime", "Orange", "Strawberry"}; + APPLE, LEMON, LIME, "Orange", "Strawberry"}; List expectedValues = Arrays.asList(expectedValuesArray); autocompleteChips.show(); autocompleteChips.is().displayed(); - autocompleteChips.has().placeholder("New Fruit..."); - autocompleteChips.has().options(expectedValues); + autocompleteChips.inputField().has().placeholder("New Fruit..."); + autocompleteChips.inputField().has().options(expectedValues); - autocompleteChips.select(LEMON); - autocompleteChips.collapseField(); + autocompleteChips.inputField().select(LEMON); autocompleteChips.is().hasElement(LEMON); - autocompleteChips.select(APPLE); - autocompleteChips.collapseField(); + autocompleteChips.inputField().select(APPLE); autocompleteChips.is().hasElement(APPLE); } @@ -115,21 +107,21 @@ public void chipsAutocompleteTest() { public void chipsWithInputTest() { inputChips.show(); inputChips.is().displayed(); - inputChips.has().placeholder(PLACEHOLDER); - inputChips.input("Kiwi" + "\n"); - inputChips.input("Melon"); - inputChips.clearInputField(); - inputChips.input("Rockmelon" + "\n"); - inputChips.is().hasElement("Kiwi"); - inputChips.is().hasElement("Rockmelon"); + inputChips.inputField().has().placeholder("New fruit..."); + inputChips.inputField().input(KIWI + "\n"); + inputChips.inputField().input(MELON); + inputChips.inputField().clear(); + inputChips.inputField().input(ROCKMELON + "\n"); + inputChips.is().hasElement(KIWI); + inputChips.is().hasElement(ROCKMELON); } @Test(description = "Test checks that chips can be removed") public void chipsRemovableTest() { inputChips.show(); inputChips.is().displayed(); - inputChips.getElement("Lemon").is().removable(); - inputChips.getElement("Lemon").close(); + inputChips.getElement(LEMON).is().removable(); + inputChips.getElement(LEMON).close(); } @Test(description = "Test checks that chips can't be removed") @@ -143,18 +135,17 @@ public void chipsNotRemovableTest() { public void chipFocusedTest() { inputChips.show(); inputChips.is().displayed(); - inputChips.getElement("Apple").click(); - inputChips.getElement("Apple").is().focused(); - inputChips.getElement("Lime").click(); - inputChips.getElement("Lime").is().focused(); - inputChips.getElement("Apple").is().notFocused(); + inputChips.getElement(APPLE).click(); + inputChips.getElement(APPLE).is().focused(); + inputChips.getElement(LIME).click(); + inputChips.getElement(LIME).is().focused(); + inputChips.getElement(APPLE).is().notFocused(); } @Test(description = "Test checks that chips has avatar image") public void chipAvatarTest() { - String expectedSrc = "https://material.angular.io/assets/img/examples/shiba1.jpg"; avatarChips.show(); - avatarChips.getElement("Dog one").leadingIcon().is().src(expectedSrc); + avatarChips.getElement("Dog one").has().image(); } @Test(description = "Test checks that chips can be disabled") @@ -190,7 +181,7 @@ public void chipsNotMultipleSelectionTest() { public void chipsErrorState() { errorChips.show(); errorChips.is().displayed(); - errorChips.input("Kiwi" + "\n"); + errorChips.inputField().input(KIWI + "\n"); errorChips.has().errorState(); } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java index 923f29b2c5..d85ca18b96 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java @@ -62,4 +62,10 @@ public ChipAssert notFocused() { jdiAssert(element().focused(), Matchers.is(false)); return this; } + + @JDIAction("Assert that '{name}' has avatar image") + public ChipAssert image() { + jdiAssert(element().hasImage(), Matchers.is(true)); + return this; + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java index 04e17bd97a..9d54f00210 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java @@ -5,8 +5,6 @@ import com.epam.jdi.light.common.JDIAction; import org.hamcrest.Matchers; -import java.util.List; - import static com.epam.jdi.light.asserts.core.SoftAssert.jdiAssert; public class ChipGroupAssert extends UIAssert { @@ -37,18 +35,6 @@ public ChipGroupAssert notVertical() { return this; } - @JDIAction("Assert that '{name}' has placeholder '{0}'") - public ChipGroupAssert placeholder(String expected) { - jdiAssert(element().getPlaceholderForChips(), Matchers.is(expected)); - return this; - } - - @JDIAction("Assert that '{name}' has options") - public ChipGroupAssert options(List options) { - jdiAssert(element().options(), Matchers.is(options)); - return this; - } - @JDIAction("Assert that '{name}' has multiple select options") public ChipGroupAssert multiselectable() { jdiAssert(element().multiselectable(), Matchers.is("true")); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index b78211092c..5f669eb36e 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -6,10 +6,11 @@ import com.epam.jdi.light.angular.elements.interfaces.HasImage; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; +import com.epam.jdi.light.elements.common.Label; import com.epam.jdi.light.elements.interfaces.base.HasClick; -import com.epam.jdi.light.ui.html.elements.common.Image; +import com.epam.jdi.light.elements.interfaces.base.HasLabel; -public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage { +public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage, HasLabel { public static final String MAT_CHIP_REMOVE = "[matChipRemove]"; @@ -43,14 +44,15 @@ public boolean highlighted() { return hasClass("mat-mdc-chip-highlighted"); } - @JDIAction("Get '{name}' label text") - public String getText() { - return find(".mdc-evolution-chip__text-label").getText(); + @Override + public Label label() { + return new Label().setCore(Label.class, find(".mdc-evolution-chip__text-label")); } - @JDIAction("Get '{name}' avatar image") - public Image leadingIcon() { - return new Image().setCore(Image.class, find("[matchipavatar]")); + @Override + @JDIAction("Get '{name}' label text") + public String labelText() { + return label().getText(); } @Override diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java index e2e1aff4bb..4a1963b415 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java @@ -59,6 +59,7 @@ public void clear() { @JDIAction("Select value {0} for '{name}'") public void select(String value) { if (value == null) return; + core().click(); WebList options = getOptions(optionsCss); options.get(value).click(); } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index 98e5d46d68..697ac5fb6a 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -6,21 +6,14 @@ import com.epam.jdi.light.angular.elements.interfaces.IsGroupElement; 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.ICoreElement; -import org.openqa.selenium.By; -import org.openqa.selenium.Keys; -import org.openqa.selenium.Point; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation { public static final String CHIP_LOCATOR = ".mat-mdc-chip"; - private final String matOptions = "mat-option"; @Override @JDIAction("Get list of '{name}' items") @@ -35,7 +28,7 @@ public List groupElements() { @JDIAction("Get {0} element from '{name}'") public Chip getElement(String value) { return groupElements().stream() - .filter(element -> element.getText().equals(value)) + .filter(element -> element.labelText().equals(value)) .findFirst() .get(); } @@ -43,7 +36,7 @@ public Chip getElement(String value) { @JDIAction("Get if {0} element exist in '{name}'") public boolean hasElement(String value) { return groupElements().stream() - .anyMatch(chip -> chip.getText().equals(value)); + .anyMatch(chip -> chip.labelText().equals(value)); } @Override @@ -76,47 +69,6 @@ public void deselectByText(String text) { } } - @JDIAction("Get '{name}' input field") - public UIElement inputField() { - return find("input"); - } - - @JDIAction("'{name}' input field input '{0}' value") - public void input(String value) { - inputField().input(value); - } - - @JDIAction("Clear value from '{name}' input field") - public void clearInputField() { - inputField().sendKeys(Keys.CONTROL + "a"); - inputField().sendKeys(Keys.DELETE); - } - - @JDIAction("Select value '{0}' for '{name}' autocomplete") - public void select(String value) { - if (value == null) return; - inputField().click(); - WebList options = getOptions(this.matOptions); - options.get(value).click(); - } - - @JDIAction("Get placeholder for '{name}' input field") - public String getPlaceholderForChips() { - String placeholder = "placeholder"; - return inputField().hasAttribute(placeholder) ? inputField().getAttribute(placeholder) : ""; - } - - @JDIAction("Collapse '{name}' chips autocomplete field") - public void collapseField() { - core().click(getPointOutsideField().getX(), getPointOutsideField().getY()); - } - - @JDIAction("Get options for '{name}' autocomplete field") - public List options() { - getItems(); - return getValues(); - } - @Override @JDIAction("Get if '{name}' is vertical") public boolean isVertical() { @@ -137,27 +89,4 @@ public boolean errorState() { public ChipGroupAssert is() { return new ChipGroupAssert().set(this); } - - protected Point getPointOutsideField() { - return new Point(core().getRect(). - getWidth() + 3, core().getRect().getHeight() + 3); - } - - private WebList getOptions(String css) { - return new WebList(By.cssSelector(css)); - } - - private WebList getItems() { - inputField().click(); - WebList options = getOptions(matOptions); - inputField().click(); - return options; - } - - private List getValues() { - List values = new ArrayList<>(); - WebList options = getOptions(this.matOptions); - options.forEach(option -> values.add(option.getValue())); - return values; - } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java index 76c67075d9..ff6085d682 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasIcon.java @@ -28,6 +28,6 @@ default Icon icon() { */ @JDIAction("Get if '{name}' has icon") default boolean hasIcon() { - return core().finds(ICON_LOCATOR).isNotEmpty(); + return icon().isExist() & icon().isVisible(); } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java index 3ac0522c13..f1d6ed6b65 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java @@ -26,7 +26,6 @@ default Image image() { */ @JDIAction("Check that '{name}' image is displayed") default boolean hasImage() { - return core().find("img").isDisplayed() - || core().find("//*[contains(@style, 'background-image')]").isDisplayed(); + return image().isExist() & image().isVisible(); } } From d55274290adb8dc1e7037cca52ba6da8a1d619d7 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Thu, 1 Feb 2024 15:33:35 +0300 Subject: [PATCH 08/12] Modified in accordance with the comments --- .../tests/elements/complex/ChipsTests.java | 14 +++--- .../light/angular/elements/common/Chip.java | 16 ++++++- .../angular/elements/complex/ChipGroup.java | 45 ++++++++++--------- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java index 876b90d250..8f17f2c9c8 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/ChipsTests.java @@ -46,9 +46,9 @@ public void before() { public void basicChipsTest() { basicChips.show(); basicChips.is().displayed().and().enabled(); - basicChips.selectByText(TWOFISH); + basicChips.selectByLabel(TWOFISH); basicChips.getElement(TWOFISH).is().selected(); - basicChips.selectByText(WARNFISH); + basicChips.selectByLabel(WARNFISH); basicChips.getElement(WARNFISH).is().selected(); ChipsPage.basicSelectedValue.has().text(format("You clicked: %s", WARNFISH)); @@ -121,7 +121,7 @@ public void chipsRemovableTest() { inputChips.show(); inputChips.is().displayed(); inputChips.getElement(LEMON).is().removable(); - inputChips.getElement(LEMON).close(); + inputChips.getElement(LEMON).remove(); } @Test(description = "Test checks that chips can't be removed") @@ -159,8 +159,8 @@ public void chipsMultipleSelectionTest() { multipleChips.show(); multipleChips.is().displayed(); multipleChips.is().multiselectable(); - multipleChips.selectByText("multiple color none"); - multipleChips.selectByText("multiple color Primary"); + multipleChips.selectByLabel("multiple color none"); + multipleChips.selectByLabel("multiple color Primary"); multipleChips.getElement("multiple color none").is().selected(); multipleChips.getElement("multiple color Primary").is().selected(); } @@ -170,8 +170,8 @@ public void chipsNotMultipleSelectionTest() { basicChips.show(); basicChips.is().displayed(); basicChips.is().notMultiselectable(); - basicChips.selectByText(TWOFISH); - basicChips.selectByText(WARNFISH); + basicChips.selectByLabel(TWOFISH); + basicChips.selectByLabel(WARNFISH); basicChips.getElement(TWOFISH).is().deselected(); basicChips.getElement(WARNFISH).is().selected(); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index 5f669eb36e..acda2e9a6e 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -20,7 +20,7 @@ public boolean selected() { } @JDIAction("Close '{name}'") - public void close() { + public void remove() { find(MAT_CHIP_REMOVE).click(); } @@ -44,6 +44,20 @@ public boolean highlighted() { return hasClass("mat-mdc-chip-highlighted"); } + @JDIAction() + public void select() { + if (!selected()) { + label().click(); + } + } + + @JDIAction() + public void unselect() { + if (selected()) { + label().click(); + } + } + @Override public Label label() { return new Label().setCore(Label.class, find(".mdc-evolution-chip__text-label")); diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index 697ac5fb6a..059d25ed20 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -2,6 +2,7 @@ import com.epam.jdi.light.angular.asserts.ChipGroupAssert; import com.epam.jdi.light.angular.elements.common.Chip; +import com.epam.jdi.light.angular.elements.interfaces.HasErrorState; import com.epam.jdi.light.angular.elements.interfaces.HasOrientation; import com.epam.jdi.light.angular.elements.interfaces.IsGroupElement; import com.epam.jdi.light.common.JDIAction; @@ -11,7 +12,7 @@ import java.util.List; import java.util.stream.Collectors; -public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation { +public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation, HasErrorState { public static final String CHIP_LOCATOR = ".mat-mdc-chip"; @@ -39,13 +40,6 @@ public boolean hasElement(String value) { .anyMatch(chip -> chip.labelText().equals(value)); } - @Override - @JDIAction("Get if all chips elements in '{name}' is displayed") - public boolean isDisplayed() { - return groupElements().stream() - .allMatch(ICoreElement::isDisplayed); - } - @Override @JDIAction("Get if all chips elements in '{name}' is enabled") public boolean isEnabled() { @@ -54,19 +48,33 @@ public boolean isEnabled() { } @JDIAction("Select chip element in '{name}' by '{0}'") - public void selectByText(String text) { + public void selectByLabel(String text) { Chip chip = getElement(text); - if (!chip.selected()) { - chip.click(); - } + chip.select(); + } + + @JDIAction("Select chip element in '{name}' by '{0}'") + public void selectByLabel(List values) { + values.forEach(value -> { + Chip chip = getElement(value); + chip.select(); + }); + } @JDIAction("Deselect chip element in '{name}' by '{0}'") - public void deselectByText(String text) { + public void unselectByLabel(String text) { Chip chip = getElement(text); - if (chip.selected()) { - chip.click(); - } + chip.unselect(); + } + + @JDIAction("Deselect chip element in '{name}' by '{0}'") + public void unselectByLabel(List values) { + values.forEach(value -> { + Chip chip = getElement(value); + chip.unselect(); + }); + } @Override @@ -80,11 +88,6 @@ public String multiselectable() { return attr("aria-multiselectable"); } - @JDIAction("Get if '{name}' has error state") - public boolean errorState() { - return core().hasClass("mat-form-field-invalid"); - } - @Override public ChipGroupAssert is() { return new ChipGroupAssert().set(this); From 589fd6480f18300da34c4a4ef5f414220f986bb8 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 5 Feb 2024 10:13:36 +0300 Subject: [PATCH 09/12] Modified in accordance with the comments --- .../angular/elements/complex/ChipGroup.java | 4 ++-- .../angular/elements/interfaces/FormField.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/FormField.java diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index 059d25ed20..6d87e0c5e0 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -2,7 +2,7 @@ import com.epam.jdi.light.angular.asserts.ChipGroupAssert; import com.epam.jdi.light.angular.elements.common.Chip; -import com.epam.jdi.light.angular.elements.interfaces.HasErrorState; +import com.epam.jdi.light.angular.elements.interfaces.FormField; import com.epam.jdi.light.angular.elements.interfaces.HasOrientation; import com.epam.jdi.light.angular.elements.interfaces.IsGroupElement; import com.epam.jdi.light.common.JDIAction; @@ -12,7 +12,7 @@ import java.util.List; import java.util.stream.Collectors; -public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation, HasErrorState { +public class ChipGroup extends UIBaseElement implements IsGroupElement, HasOrientation, FormField { public static final String CHIP_LOCATOR = ".mat-mdc-chip"; diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/FormField.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/FormField.java new file mode 100644 index 0000000000..7b2a1054fa --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/FormField.java @@ -0,0 +1,17 @@ +package com.epam.jdi.light.angular.elements.interfaces; + +import com.epam.jdi.light.common.JDIAction; +import com.epam.jdi.light.elements.interfaces.base.ICoreElement; + +public interface FormField extends ICoreElement { + + /** + * Checks if element has Error State or not. + * + * @return {@code true} if element has Error State, otherwise {@code false} + */ + @JDIAction("Get if '{name}' is vertical") + default boolean errorState() { + return core().hasClass("mat-form-field-invalid"); + } +} From cabfa9830f66bbf88a9cb404b8e30040be59f877 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 5 Feb 2024 11:55:36 +0300 Subject: [PATCH 10/12] checkstyle's fixes --- .../jdi/light/angular/asserts/ChipAssert.java | 18 +++++++++--------- .../light/angular/asserts/ChipGroupAssert.java | 8 ++++---- .../jdi/light/angular/asserts/ChipsAssert.java | 0 .../light/angular/elements/common/Chip.java | 18 +++++++++--------- .../angular/elements/complex/AutoComplete.java | 18 +++++++++++++----- .../angular/elements/complex/ChipGroup.java | 2 +- .../light/angular/elements/complex/Chips.java | 0 .../angular/elements/interfaces/HasImage.java | 2 +- 8 files changed, 37 insertions(+), 29 deletions(-) delete mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java delete mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java index d85ca18b96..aae8d7b4af 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipAssert.java @@ -12,25 +12,25 @@ public class ChipAssert extends UIAssert { @JDIAction("Assert that '{name}' is enabled") public ChipAssert selected() { - jdiAssert(element().selected(), Matchers.is(true)); + jdiAssert(element().selected(), Matchers.is(true), "Element is not selected"); return this; } @JDIAction("Assert that '{name}' is enabled") public ChipAssert deselected() { - jdiAssert(element().selected(), Matchers.is(false)); + jdiAssert(element().selected(), Matchers.is(false), "Element is selected"); return this; } @JDIAction("Assert that '{name}' is removable ") public ChipAssert removable() { - jdiAssert(element().removable(), Matchers.is(true)); + jdiAssert(element().removable(), Matchers.is(true), "Element is not removable"); return this; } @JDIAction("Assert that '{name}' is removable ") public ChipAssert notRemovable() { - jdiAssert(element().removable(), Matchers.is(false)); + jdiAssert(element().removable(), Matchers.is(false), "Element is removable"); return this; } @@ -41,31 +41,31 @@ public ChipAssert color(AngularColors color) { @JDIAction("Assert that '{name}' is focused ") public ChipAssert focused() { - jdiAssert(element().focused(), Matchers.is(true)); + jdiAssert(element().focused(), Matchers.is(true), "Element is not focused"); return this; } @JDIAction("Assert that '{name}' is highlighted ") public ChipAssert highlighted() { - jdiAssert(element().highlighted(), Matchers.is(true)); + jdiAssert(element().highlighted(), Matchers.is(true), "Element is not highlighted"); return this; } @JDIAction("Assert that '{name}' isn't highlighted ") public ChipAssert notHighlighted() { - jdiAssert(element().highlighted(), Matchers.is(false)); + jdiAssert(element().highlighted(), Matchers.is(false), "Element is highlighted"); return this; } @JDIAction("Assert that '{name}' isn't focused ") public ChipAssert notFocused() { - jdiAssert(element().focused(), Matchers.is(false)); + jdiAssert(element().focused(), Matchers.is(false), "Element is focused"); return this; } @JDIAction("Assert that '{name}' has avatar image") public ChipAssert image() { - jdiAssert(element().hasImage(), Matchers.is(true)); + jdiAssert(element().hasImage(), Matchers.is(true), "Element is not avatar image"); return this; } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java index 9d54f00210..037b93d375 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipGroupAssert.java @@ -25,13 +25,13 @@ public ChipGroupAssert enabled() { @JDIAction("Assert that '{name}' aria-orientation is vertical") public ChipGroupAssert vertical() { - jdiAssert(element().isVertical(), Matchers.is(true)); + jdiAssert(element().isVertical(), Matchers.is(true), "Element is not vertical"); return this; } @JDIAction("Assert that '{name}' aria-orientation is not vertical") public ChipGroupAssert notVertical() { - jdiAssert(element().isVertical(), Matchers.is(false)); + jdiAssert(element().isVertical(), Matchers.is(false), "Element is not vertical"); return this; } @@ -49,13 +49,13 @@ public ChipGroupAssert notMultiselectable() { @JDIAction("Assert that '{name}' has '{0}' element") public ChipGroupAssert hasElement(String expected) { - jdiAssert(element().hasElement(expected), Matchers.is(true)); + jdiAssert(element().hasElement(expected), Matchers.is(true), "Element is has not " + expected + " element"); return this; } @JDIAction("Assert that '{name}' has error state") public ChipGroupAssert errorState() { - jdiAssert(element().errorState(), Matchers.is(true)); + jdiAssert(element().errorState(), Matchers.is(true), "Element is has not error state"); return this; } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/ChipsAssert.java deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index acda2e9a6e..9f82f13d72 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -16,42 +16,42 @@ public class Chip extends UIBaseElement implements HasClick, HasColo @JDIAction("Get if '{name} is selected'") public boolean selected() { - return hasClass("mat-mdc-chip-selected"); + return core().hasClass("mat-mdc-chip-selected"); } @JDIAction("Close '{name}'") public void remove() { - find(MAT_CHIP_REMOVE).click(); + core().find(MAT_CHIP_REMOVE).click(); } @JDIAction("Get if '{name}' is removable") public boolean removable() { - return find(MAT_CHIP_REMOVE).isDisplayed(); + return core().find(MAT_CHIP_REMOVE).isDisplayed(); } @JDIAction("Get if '{name}' is focused") public boolean focused() { - return hasClass("cdk-focused"); + return core().hasClass("cdk-focused"); } @JDIAction("Get if '{name}' checkmark is visible") public boolean hasCheckMark() { - return find("mdc-evolution-chip__checkmark").isVisible(); + return core().find("mdc-evolution-chip__checkmark").isVisible(); } @JDIAction("Get if '{name}' is highlighted") public boolean highlighted() { - return hasClass("mat-mdc-chip-highlighted"); + return core().hasClass("mat-mdc-chip-highlighted"); } - @JDIAction() + @JDIAction("Select '{name}'") public void select() { if (!selected()) { label().click(); } } - @JDIAction() + @JDIAction("Unselect '{name}'") public void unselect() { if (selected()) { label().click(); @@ -60,7 +60,7 @@ public void unselect() { @Override public Label label() { - return new Label().setCore(Label.class, find(".mdc-evolution-chip__text-label")); + return new Label().setCore(Label.class, core().find(".mdc-evolution-chip__text-label")); } @Override diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java index 4a1963b415..e8bbfcb33e 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/AutoComplete.java @@ -15,7 +15,11 @@ import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static com.epam.jdi.light.common.TextTypes.VALUE; @@ -58,7 +62,9 @@ public void clear() { @JDIAction("Select value {0} for '{name}'") public void select(String value) { - if (value == null) return; + if (value == null) { + return; + } core().click(); WebList options = getOptions(optionsCss); options.get(value).click(); @@ -237,8 +243,8 @@ public Boolean expanded() { return false; } else { return getOptions().get(1). - getAllAttributes().keys(). - contains(getAutocompleteUniqueAttribute()); + getAllAttributes().keys(). + contains(getAutocompleteUniqueAttribute()); } } @@ -248,6 +254,8 @@ public Boolean collapsed() { } @Override - public AutoCompleteAssert is() { return new AutoCompleteAssert().set(this); } + public AutoCompleteAssert is() { + return new AutoCompleteAssert().set(this); + } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java index 6d87e0c5e0..9afd75bb3b 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/ChipGroup.java @@ -85,7 +85,7 @@ public boolean isVertical() { @JDIAction("Get if '{name}' has multiple selection") public String multiselectable() { - return attr("aria-multiselectable"); + return core().attr("aria-multiselectable"); } @Override diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Chips.java deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java index f1d6ed6b65..428d660951 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasImage.java @@ -16,7 +16,7 @@ public interface HasImage extends ICoreElement { */ @JDIAction("Get '{name}' image") default Image image() { - return new Image().setCore(Image.class, find("img")); + return new Image().setCore(Image.class, core().find("img")); } /** From 1e38219b61316b0a78382fcce27c83951bf46aea Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 5 Feb 2024 11:59:15 +0300 Subject: [PATCH 11/12] checkstyle's fixes --- .../io/github/com/custom/elements/ChipGroupWithAutocomlete.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java b/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java index cef40f41fc..9f9f4a5f3f 100644 --- a/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java +++ b/jdi-light-angular-tests/src/main/java/io/github/com/custom/elements/ChipGroupWithAutocomlete.java @@ -8,6 +8,6 @@ public class ChipGroupWithAutocomlete extends ChipGroup { @JDIAction("Get '{name}' input field") public AutoComplete inputField() { - return new AutoComplete().setCore(AutoComplete.class, find("input")); + return new AutoComplete().setCore(AutoComplete.class, core().find("input")); } } From a614fd6d9889890ffbdb65a8776d9d97e9233ce2 Mon Sep 17 00:00:00 2001 From: Konstantin Bulavin Date: Mon, 5 Feb 2024 12:12:02 +0300 Subject: [PATCH 12/12] Modified in accordance with the comments --- .../light/angular/elements/common/Chip.java | 3 +- .../angular/elements/interfaces/HasColor.java | 32 ------------------- 2 files changed, 2 insertions(+), 33 deletions(-) delete mode 100644 jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java index 9f82f13d72..b5a084c658 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/common/Chip.java @@ -1,13 +1,14 @@ package com.epam.jdi.light.angular.elements.common; import com.epam.jdi.light.angular.asserts.ChipAssert; -import com.epam.jdi.light.angular.elements.interfaces.HasColor; + import com.epam.jdi.light.angular.elements.interfaces.HasIcon; import com.epam.jdi.light.angular.elements.interfaces.HasImage; import com.epam.jdi.light.common.JDIAction; import com.epam.jdi.light.elements.base.UIBaseElement; import com.epam.jdi.light.elements.common.Label; import com.epam.jdi.light.elements.interfaces.base.HasClick; +import com.epam.jdi.light.elements.interfaces.base.HasColor; import com.epam.jdi.light.elements.interfaces.base.HasLabel; public class Chip extends UIBaseElement implements HasClick, HasColor, HasIcon, HasImage, HasLabel { diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java deleted file mode 100644 index 0a0da6db0e..0000000000 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/interfaces/HasColor.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.epam.jdi.light.angular.elements.interfaces; - -import com.epam.jdi.light.common.JDIAction; -import com.epam.jdi.light.elements.interfaces.base.ICoreElement; - -/** - * Interface HasColor includes methods to check element color and background color. - */ -public interface HasColor extends ICoreElement { - - /** - * Get element color. - * - * @return color value - */ - - @JDIAction("Get '{name}' color") - default String color() { - return core().css("color"); - } - - /** - * Get element background color. - * - * @return background color value - */ - - @JDIAction("Get '{name}' background color") - default String backgroundColor() { - return core().css("background-color"); - } -}