diff --git a/.gitignore b/.gitignore index 8fae12a..02a49f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea target *.iml -.DS_Store \ No newline at end of file +.DS_Store +*.md~ diff --git a/README.md b/README.md index 69e007d..617db94 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # Practice of automation school 2016 See all info in repo [autoschool/autoschool.github.io](https://github.com/autoschool/autoschool.github.io) + +Link to my repo with Dockerfile: https://github.com/kormyshov/DockerWithUbuntu diff --git a/api-tests-module/pom.xml b/api-tests-module/pom.xml new file mode 100644 index 0000000..bdcdbdc --- /dev/null +++ b/api-tests-module/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + + school-2016 + ru.qatools.school + 1.0-SNAPSHOT + + + api-tests-module + jar + + API tests Module + + + + com.tngtech.java + junit-dataprovider + 1.10.4 + test + + + ru.qatools.school + school-2016 + 1.0-SNAPSHOT + test + + + com.squareup.retrofit2 + retrofit + 2.0.2 + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + true + + + ru.yandex.qatools.allure + allure-maven-plugin + 2.0 + + + + + diff --git a/commons-module/pom.xml b/commons-module/pom.xml index 97cb03e..f6437e0 100644 --- a/commons-module/pom.xml +++ b/commons-module/pom.xml @@ -32,6 +32,24 @@ 1.10.4 test + + ru.qatools.school + commons-module + 1.0-SNAPSHOT + test + + + ru.qatools.school + school-2016 + 1.0-SNAPSHOT + test + + + ru.qatools.school + steps-module + 1.0-SNAPSHOT + test + diff --git a/commons-module/src/test/java/ru/qatools/school/MyFirstTest.java b/commons-module/src/test/java/ru/qatools/school/MyFirstTest.java deleted file mode 100644 index 7b9da2e..0000000 --- a/commons-module/src/test/java/ru/qatools/school/MyFirstTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package ru.qatools.school; - -import com.tngtech.java.junit.dataprovider.DataProvider; -import com.tngtech.java.junit.dataprovider.DataProviderRunner; -import com.tngtech.java.junit.dataprovider.UseDataProvider; -import org.junit.Test; -import org.junit.runner.RunWith; -import ru.qatools.school.data.Place; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static ru.qatools.school.steps.UserSteps.user; - - -/** - * @author gladnik (Nikolai Gladkov) - */ -@RunWith(DataProviderRunner.class) -public class MyFirstTest { - - @DataProvider - public static List places() { - List placesList - = new ArrayList(Arrays.asList(Place.values())); - placesList.add(null); - return placesList; - } - - @Test - public void shouldBeAtNullWhenDefault() { - user().shouldBeAtPlace(null); - } - - @Test - @UseDataProvider("places") - public void afterGoSomewhereShouldBeThere(Place place) { - user().goTo(place).shouldBeAtPlace(place); - } - - @Test - @UseDataProvider("places") - public void afterGoSomewhereTwiceShouldBeThere(Place place) { - user().goTo(place).goTo(place).shouldBeAtPlace(place); - } - - @Test - public void afterGoSomewhereElseShouldBeThere() { - user().goTo(Place.HOME).goTo(Place.AT_YANDEX) - .shouldBeAtPlace(Place.AT_YANDEX); - } -} diff --git a/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWebTest.java b/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWebTest.java index a4c5a40..a45d501 100644 --- a/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWebTest.java +++ b/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWebTest.java @@ -6,27 +6,48 @@ import ru.qatools.school.pages.MainPage; import ru.qatools.school.rules.WebDriverRule; import ru.qatools.school.steps.websteps.DefaultSteps; +import ru.qatools.school.tp.TPInformerRule; import ru.yandex.qatools.allure.annotations.Title; +import ru.yandex.qatools.allure.annotations.TestCaseId; public class WeatherWebTest { - public static final String MOSCOW = "Moscow"; + public static final String CITY = "Krasnoyarsk"; private DefaultSteps defaultSteps; @Rule public WebDriverRule webDriverRule = new WebDriverRule(); + @Rule + public TPInformerRule tms = new TPInformerRule("kormyshov"); + @Before public void initSteps() { defaultSteps = new DefaultSteps(webDriverRule.getDriver()); } @Test - @Title("Должны видеть виджет на главной странице") + @Title("Должен быть виден виджет на главной странице") public void shouldSeeWidgetOnMainPage() { - defaultSteps.openMainPageWithCity(MOSCOW); - defaultSteps.shouldSee(onMainPage().getWeatherWidget().get(0)); + defaultSteps.openMainPageWithCity(CITY); + defaultSteps.shouldSee(onMainPage().getFirstWidget()); + } + + @Test + @Title("Должен быть виден виджет для переданного города") + public void shouldSeeCityFromGETQuery() { + defaultSteps.openMainPageWithCity(CITY); + defaultSteps.shouldSeeText(onMainPage().getFirstWidget().getWidgetTitle().getCityName(), CITY); + } + + @Test + @Title("Должны быть видны два виджета на странице") + public void shouldSeeTwoWidgetsAfterAddOne() { + defaultSteps.openMainPageWithCity(CITY); + defaultSteps.clickOn(onMainPage().getNewWidgetButton()); + defaultSteps.shouldHaveSize(onMainPage().getWeatherWidgets(), 2); + defaultSteps.shouldSee(onMainPage().getWeatherWidgets()); } private MainPage onMainPage() { diff --git a/steps-module/src/main/java/ru/qatools/school/pages/MainPage.java b/steps-module/src/main/java/ru/qatools/school/pages/MainPage.java index 4d75376..a3c6291 100644 --- a/steps-module/src/main/java/ru/qatools/school/pages/MainPage.java +++ b/steps-module/src/main/java/ru/qatools/school/pages/MainPage.java @@ -5,6 +5,7 @@ import org.openqa.selenium.support.PageFactory; import ru.qatools.school.pages.blocks.WeatherWidget; import ru.yandex.qatools.htmlelements.annotations.Name; +import ru.yandex.qatools.htmlelements.element.HtmlElement; import ru.yandex.qatools.htmlelements.loader.decorator.HtmlElementDecorator; import ru.yandex.qatools.htmlelements.loader.decorator.HtmlElementLocatorFactory; @@ -21,10 +22,26 @@ public MainPage(WebDriver driver) { @Name("Список виджетов") @FindBy(css = ".card.card_md") - private List weatherWidget; + private List weatherWidgets; - public List getWeatherWidget() { - return weatherWidget; + @Name("Первый виджет в списке") + @FindBy(css = ".card.card_md") + private WeatherWidget firstWidget; + + @Name("Кнопка добавления виджета") + @FindBy(css = ".new-card") + private HtmlElement newWidgetButton; + + public List getWeatherWidgets() { + return weatherWidgets; + } + + public WeatherWidget getFirstWidget() { + return firstWidget; + } + + public HtmlElement getNewWidgetButton() { + return newWidgetButton; } } diff --git a/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetTitle.java b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetTitle.java index 8a88782..b9baa47 100644 --- a/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetTitle.java +++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetTitle.java @@ -1,13 +1,23 @@ package ru.qatools.school.pages.blocks.widgetblocks; import org.openqa.selenium.Rectangle; +import org.openqa.selenium.support.FindBy; +import ru.yandex.qatools.htmlelements.annotations.Name; import ru.yandex.qatools.htmlelements.element.HtmlElement; /** - * Created by kurau. + * @author kormyshov */ public class WidgetTitle extends HtmlElement { + @Name("Поле с названием города") + @FindBy(css = ".card-title__primary") + private HtmlElement cityName; + + public HtmlElement getCityName() { + return cityName; + } + public Rectangle getRect() { return null; } diff --git a/steps-module/src/main/java/ru/qatools/school/steps/websteps/DefaultSteps.java b/steps-module/src/main/java/ru/qatools/school/steps/websteps/DefaultSteps.java index 1425a42..346a3c4 100644 --- a/steps-module/src/main/java/ru/qatools/school/steps/websteps/DefaultSteps.java +++ b/steps-module/src/main/java/ru/qatools/school/steps/websteps/DefaultSteps.java @@ -1,16 +1,25 @@ package ru.qatools.school.steps.websteps; +import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import ru.qatools.school.pages.MainPage; import ru.yandex.qatools.allure.annotations.Step; +import ru.yandex.qatools.htmlelements.element.HtmlElement; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import static java.lang.String.format; +import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; +import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.exists; +import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.hasText; import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.isDisplayed; /** - * Created by kurau. + * @author kormyshov */ public class DefaultSteps { @@ -27,9 +36,29 @@ public void openMainPageWithCity(String city) { driver.get(format(MAIN_PAGE, city)); } - @Step("Должны видеть на странице «{0}»") + @Step("Должны видеть элемент «{0}»") public void shouldSee(WebElement element) { - assertThat("Должны видеть элемент", element, isDisplayed()); + assertThat("Должны видеть элемент", element, both(exists()).and(isDisplayed())); + } + + @Step("Должно быть «{1}» элементов в «{0}»") + public void shouldHaveSize(Collection elements, int size){ + assertThat("Неверное количество элементов", elements, hasSize(size)); + } + + @Step("Должны видеть каждый из «{0}»") + public void shouldSee(List elements) { + assertThat("Должны видеть элементы", new ArrayList<>(elements), everyItem(both(exists()).and(isDisplayed()))); + } + + @Step("Должен быть текст «{1}» у элемента «{0}»") + public void shouldSeeText(WebElement element, String text) { + assertThat("Неверный текст элемента", element.getText(), is(text)); + } + + @Step("Кликаем по «{0}»") + public void clickOn(HtmlElement element){ + element.click(); } private MainPage onMainPage() {