diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/StaticSite.java b/jdi-light-angular-tests/src/main/java/io/github/com/StaticSite.java index 0c329d4132..ef36558cbd 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.InputPage; import io.github.com.pages.ButtonTogglePage; import io.github.com.pages.ButtonsPage; +import io.github.com.pages.CardPage; import io.github.com.pages.CheckBoxPage; import io.github.com.pages.DividerPage; import io.github.com.pages.ProgressBarPage; @@ -53,4 +54,7 @@ public class StaticSite { @Url("slide_toggle") public static SlideTogglePage slideTogglePage; + + @Url("card") + public static CardPage cardPage; } diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/CardPage.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/CardPage.java new file mode 100644 index 0000000000..eb996a9d32 --- /dev/null +++ b/jdi-light-angular-tests/src/main/java/io/github/com/pages/CardPage.java @@ -0,0 +1,33 @@ +package io.github.com.pages; + +import com.epam.jdi.light.angular.elements.complex.Card; +import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; + +public class CardPage extends NewAngularPage { + @UI("#simple-card") + public static Card simpleCard; + + @UI("#example-card") + public static Card card; + + @UI("#card-with-footer") + public static Card cardWithFooter; + + @UI("#card-with-alignment-align-start") + public static Card cardAlignStartActions; + + @UI("#card-with-alignment-align-end") + public static Card cardAlignEndActions; + + @UI("#card-with-media-size-sm-image") + public static Card cardWithSmallImage; + + @UI("#card-with-media-size-md-image") + public static Card cardWithMediumImage; + + @UI("#card-with-media-size-lg-image") + public static Card cardWithLargeImage; + + @UI("#card-with-media-size-xl-image") + public static Card cardWithExtraLargeImage; +} diff --git a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/CardSection.java b/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/CardSection.java deleted file mode 100644 index 0f7e350d0e..0000000000 --- a/jdi-light-angular-tests/src/main/java/io/github/com/pages/sections/CardSection.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.com.pages.sections; - -import com.epam.jdi.light.angular.elements.complex.Card; -import com.epam.jdi.light.elements.composite.Section; -import com.epam.jdi.light.elements.pageobjects.annotations.locators.UI; - -public class CardSection extends Section { - @UI("#simple-card") - public static Card simpleCard; - - @UI("#example-card") - public static Card card; -} diff --git a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/CardTests.java b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/CardTests.java index 2eb6b9ae00..bf4c832323 100644 --- a/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/CardTests.java +++ b/jdi-light-angular-tests/src/test/java/io/github/epam/angular/tests/elements/complex/CardTests.java @@ -1,61 +1,109 @@ package io.github.epam.angular.tests.elements.complex; import io.github.epam.TestsInit; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Ignore; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import static io.github.com.StaticSite.angularPage; -import static io.github.com.pages.sections.CardSection.card; -import static io.github.com.pages.sections.CardSection.simpleCard; -import static io.github.epam.site.steps.States.shouldBeLoggedIn; +import static com.epam.jdi.light.angular.elements.enums.CardImageSize.EXTRALARGE; +import static com.epam.jdi.light.angular.elements.enums.CardImageSize.LARGE; +import static com.epam.jdi.light.angular.elements.enums.CardImageSize.MEDIUM; +import static com.epam.jdi.light.angular.elements.enums.CardImageSize.SMALL; +import static com.jdiai.tools.Timer.waitCondition; +import static io.github.com.StaticSite.cardPage; +import static io.github.com.pages.CardPage.card; +import static io.github.com.pages.CardPage.cardAlignEndActions; +import static io.github.com.pages.CardPage.cardAlignStartActions; +import static io.github.com.pages.CardPage.cardWithExtraLargeImage; +import static io.github.com.pages.CardPage.cardWithFooter; +import static io.github.com.pages.CardPage.cardWithLargeImage; +import static io.github.com.pages.CardPage.cardWithMediumImage; +import static io.github.com.pages.CardPage.cardWithSmallImage; +import static io.github.com.pages.CardPage.simpleCard; + -// TODO Move to the new page -@Ignore public class CardTests extends TestsInit { - @BeforeMethod + + private static final String IMAGE_SRC = "https://material.angular.io/assets/img/examples/shiba2.jpg"; + + @BeforeClass public void before() { - shouldBeLoggedIn(); - angularPage.shouldBeOpened(); + cardPage.open(); + waitCondition(() -> cardPage.isOpened()); + cardPage.checkOpened(); } - @Test + @Test(description = "Test verifies that card is displayed") public void displayedBasicCardTest() { simpleCard.is().displayed(); card.is().displayed(); } - @Test - public void attributeCardTest() { - simpleCard.is().assertCardText("Simple card"); - card.is().assertAltImageAttribute("Photo of a Shiba Inu"); - card.is().assertSrcImageAttribute("https://material.angular.io/assets/img/examples/shiba2.jpg"); - } +// @Test(description = "Test verifies card text and image") +// public void attributeCardTest() { +// card.has().altImageAttribute("Photo of a Shiba Inu"); +// card.has().srcImageAttribute(IMAGE_SRC); +// +// cardWithSmallImage.has().headerImageWithSrcAttribute(IMAGE_SRC); +// cardWithMediumImage.has().headerImageWithSrcAttribute(IMAGE_SRC); +// cardWithLargeImage.has().headerImageWithSrcAttribute(IMAGE_SRC); +// cardWithExtraLargeImage.has().headerImageWithSrcAttribute(IMAGE_SRC); +// } - @Test - public void displayedCardTest() { - card.getHeader().is().displayed(); - card.getHeaderText().is().displayed(); - card.getAvatar().is().displayed(); - card.getTitle().is().displayed(); - card.getTitle().is().text("Shiba Inu"); - card.getSubtitle().is().displayed(); - card.getSubtitle().is().text("Dog Breed"); - card.getImage().is().displayed(); - card.getContent().is().displayed(); - card.getContent().is().displayed(); - } +// @Test(description = "Test verifies that elements of the card are displayed") +// public void displayedCardTest() { +// card.show(); +// card.header().is().displayed(); +// card.avatar().is().displayed(); +// card.title().is().displayed(); +// card.title().is().text("Shiba Inu"); +// card.subtitle().is().displayed(); +// card.subtitle().has().text("Dog Breed"); +// card.bodyImage().is().displayed(); +// card.content().is().displayed(); +// card.actions().is().displayed(); +// cardWithFooter.show(); +// cardWithFooter.footer().is().displayed(); +// cardWithFooter.actions().is().displayed(); +// } - @Test - public void cardButtonsTest() { - card.is().assertNumberOfButtonsOnCard(2); - card.getButtonByNumber(1).is().text("LIKE"); - card.getButtonByNumber(2).is().text("SHARE"); - } +// @Test(description = "Test verifies number and text of card buttons") +// public void cardButtonsTest() { +// card.show(); +// card.has().numberOfButtonsOnCard(2); +// card.buttonByNumber(1).has().text("LIKE"); +// card.buttonByNumber(2).has().text("SHARE"); +// } - @Test - public void cardButtonsClickTest() { - card.getButtonByText("LIKE").click(); - card.getButtonByText("LIKE").has().cssClass("cdk-focused"); - } -} +// @Test(description = "Test verifies that after click button becomes focused") +// public void cardButtonsClickTest() { +// card.buttonByText("LIKE").click(); +// card.buttonByText("LIKE").has().cssClass("cdk-focused"); +// } + +// @Test(description = "Test verifies that align end and start actions position") +// public void alignPositionTest() { +// cardAlignEndActions.show(); +// cardAlignEndActions.actions().is().displayed(); +// cardAlignEndActions.has().alignEndActions(); +// cardAlignStartActions.show(); +// cardAlignStartActions.actions().is().displayed(); +// cardAlignStartActions.has().alignStartActions(); +// } + +// @Test(description = "Test verifies image size of the card") +// public void sizeOfCardImageTest() { +// card.has().imageSize(320, 400); +// +// cardWithSmallImage.has().headerImageSize(SMALL); +// cardWithSmallImage.has().headerImageSize(80, 80); +// +// cardWithMediumImage.has().headerImageSize(MEDIUM); +// cardWithMediumImage.has().headerImageSize(112, 112); +// +// cardWithLargeImage.has().headerImageSize(LARGE); +// cardWithLargeImage.has().headerImageSize(152, 152); +// +// cardWithExtraLargeImage.has().headerImageSize(EXTRALARGE); +// cardWithExtraLargeImage.has().headerImageSize(240, 240); +// } +} \ No newline at end of file diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/CardAssert.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/CardAssert.java index f3fd8cac0e..3a429fb862 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/CardAssert.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/asserts/CardAssert.java @@ -2,33 +2,64 @@ import com.epam.jdi.light.angular.elements.complex.Card; 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 CardAssert extends UIAssert { - @JDIAction(value = "Assert that '{name}' has text '{0}'", isAssert = true) - public CardAssert assertCardText(String value) { - jdiAssert(element().getCardText().equals(value), Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); - return this; - } - - @JDIAction(value = "Assert that '{name}' alt image attribute has text '{0}'", isAssert = true) - public CardAssert assertAltImageAttribute(String value) { - jdiAssert(element().getImage().getAttribute("alt").contains(value), Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); - return this; - } - - @JDIAction(value = "Assert that '{name}' src image attribute has text '{0}'", isAssert = true) - public CardAssert assertSrcImageAttribute(String value) { - jdiAssert(element().getImage().getAttribute("src").contains(value), Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); - return this; - } - @JDIAction(value = "Assert that '{name}' has '{0}' buttons", isAssert = true) - public CardAssert assertNumberOfButtonsOnCard(int number) { - jdiAssert(element().getButtons().size() == number, Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); - return this; - } +// @JDIAction(value = "Assert that '{name}' alt image attribute has text '{0}'", isAssert = true) +// public CardAssert altImageAttribute(String value) { +// jdiAssert(element().bodyImage().alt().contains(value), Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); +// return this; +// } +// +// @JDIAction(value = "Assert that '{name}' src image attribute has text '{0}'", isAssert = true) +// public CardAssert srcImageAttribute(String value) { +// jdiAssert(element().bodyImage().src().contains(value), Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); +// return this; +// } +// +// @JDIAction(value = "Assert that '{name}' alt image attribute has text '{0}'", isAssert = true) +// public CardAssert headerImageWithSrcAttribute(String src) { +// jdiAssert(element().headerImage().src().contains(src), Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); +// return this; +// } +// +// @JDIAction(value = "Assert that '{name}' has '{0}' buttons", isAssert = true) +// public CardAssert numberOfButtonsOnCard(int number) { +// jdiAssert(element().actionButtons().size() == number, Matchers.is(true), "ERROR MESSAGE IS REQUIRED"); +// return this; +// } +// +// @JDIAction("Assert that '{name}' has align end actions") +// public CardAssert alignEndActions() { +// jdiAssert(element().actionsEndAlign(), Matchers.is(true), +// "Card actions are in start align position"); +// return this; +// } +// +// @JDIAction("Assert that '{name}' has align start actions") +// public CardAssert alignStartActions() { +// jdiAssert(element().actionsEndAlign(), Matchers.is(false), +// "Card actions are in end align position"); +// return this; +// } +// +// @JDIAction("Assert that {name} has image with '{1}' height and '{2}' width") +// public CardAssert imageSize(int height, int width) { +// jdiAssert(element().bodyImage().height(), Matchers.equalTo(height)); +// jdiAssert(element().bodyImage().width(), Matchers.equalTo(width)); +// return this; +// } +// +// @JDIAction("Assert that {name} has header image with '{1}' height and '{2}' width") +// public CardAssert headerImageSize(int height, int width) { +// jdiAssert(element().headerImage().height(), Matchers.equalTo(height)); +// jdiAssert(element().headerImage().width(), Matchers.equalTo(width)); +// return this; +// } +// +// @JDIAction("Assert that {name} has image '{1}' size") +// public CardAssert headerImageSize(CardImageSize size) { +// jdiAssert(element().headerImageSize(), Matchers.is(size)); +// return this; +// } } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Card.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Card.java index e1547eb794..97bc013d43 100644 --- a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Card.java +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/complex/Card.java @@ -4,70 +4,77 @@ 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.ui.html.elements.common.Image; /** * To see an example of Card web element please visit https://material.angular.io/components/card/overview. */ public class Card extends UIBaseElement { + + //Properties + @JDIAction("Get '{name}' header") - public UIElement getHeader() { - return this.find(".mat-card-header"); + UIElement header() { + return core().find(".//mat-card-header"); } - @JDIAction("Get '{name}' avatar") - public UIElement getAvatar() { - return this.find(".mat-card-avatar"); + @JDIAction("Get '{name}' title") + UIElement title() { + return core().find(".mat-mdc-card-title"); } - @JDIAction("Get '{name}' header text") - public UIElement getHeaderText() { - return this.find(".mat-card-header-text"); + @JDIAction("Get '{name}' subtitle") + UIElement subtitle() { + return core().find(".mat-mdc-card-subtitle"); } - @JDIAction("Get '{name}' title") - public UIElement getTitle() { - return this.find(".mat-card-title"); + @JDIAction("Get '{name}' avatar") + Image avatar() { + return new Image().setCore(Image.class, core().find(".mat-mdc-card-avatar")); } - @JDIAction("Get '{name}' subtitle") - public UIElement getSubtitle() { - return this.find(".mat-card-subtitle"); + @JDIAction("Get '{name}' content") + UIElement content() { + return core().find(".//mat-card-content"); } @JDIAction("Get '{name}' image") - public UIElement getImage() { - return this.find(".mat-card-image"); + Image image() { + return new Image().setCore(Image.class, core().find(".//img[@mat-card-image]")); } - @JDIAction("Get '{name}' content") - public UIElement getContent() { - return this.find(".mat-card-content"); + @JDIAction("Get '{name}' actions") + UIElement actions() { + return core().find(".//mat-card-actions"); } - @JDIAction("Get '{name}' buttons") - public WebList getButtons() { - return this.finds(".mat-button"); + @JDIAction("Get '{name}'s footer") + UIElement footer() { + return core().find(".//mat-card-footer"); } - @JDIAction("Get '{name}' text") - public String getCardText() { - return core().getText(); + //Methods + + @JDIAction("Click '{name}' LIKE button") + void clickLike() { + core().find(".//mat-card-actions//span[text()='LIKE']").click(); } - @JDIAction("Get button with text '{text}'") - public UIElement getButtonByText(String text) { - return this.getButtons().get(text); + @JDIAction("Click '{name}' SHARE button") + void clickShare() { + core().find(".//mat-card-actions//span[text()='SHARE']").click(); } - @JDIAction("Get button with number '{number}'") - public UIElement getButtonByNumber(int number) { - return this.getButtons().get(number); + @JDIAction("Get '{name}' header title text") + String getHeaderTitleText() { + return title().getText(); } - @Override - public CardAssert is() { - return new CardAssert().set(this); + @JDIAction("Get '{name}' header subtitle text") + String getHeaderSubtitleText() { + return subtitle().getText(); } + + //Events } diff --git a/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/CardImageSize.java b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/CardImageSize.java new file mode 100644 index 0000000000..485016f3ba --- /dev/null +++ b/jdi-light-angular/src/main/java/com/epam/jdi/light/angular/elements/enums/CardImageSize.java @@ -0,0 +1,10 @@ +package com.epam.jdi.light.angular.elements.enums; + +public enum CardImageSize { + + EXTRALARGE, + LARGE, + MEDIUM, + SMALL, + UNKNOWN; +}