diff --git a/README.md b/README.md
index 69e007d..cf0f045 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,7 @@
# Practice of automation school 2016
See all info in repo [autoschool/autoschool.github.io](https://github.com/autoschool/autoschool.github.io)
+
+HERE link for my repo with copy of Dockerfile
+
+https://github.com/theBaldSoprano/ubuntuWithCurlGit
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..19c2f12 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
@@ -23,10 +23,26 @@ public void initSteps() {
}
@Test
- @Title("Должны видеть виджет на главной странице")
+ @Title("Widget on main page must be seen")
public void shouldSeeWidgetOnMainPage() {
defaultSteps.openMainPageWithCity(MOSCOW);
- defaultSteps.shouldSee(onMainPage().getWeatherWidget().get(0));
+ defaultSteps.shouldSeeWidget(onMainPage().getWeatherWidgetList().get(0));
+ }
+
+ @Test
+ @Title("City from widget must match city from URL")
+ public void shouldWidgetCityBeLinkCity() {
+ defaultSteps.openMainPageWithCity(MOSCOW);
+ defaultSteps.shouldBeWeatherOfLinkCity(MOSCOW, onMainPage().getWeatherWidgetList().get(0).getWidgetTitle().getWidgetCity());
+ }
+
+ @Test
+ @Title("Widget must be added after pushing \"add new widget\" button")
+ public void shouldWidgetBeAdded() {
+ defaultSteps.openMainPageWithCity(MOSCOW);
+ int buttonTimesPushed = 5;
+ defaultSteps.pushNewWeatherButtonNTimes(buttonTimesPushed);
+ defaultSteps.shouldSeeNumWidgets(buttonTimesPushed + 1, onMainPage().getWeatherWidgetList());
}
private MainPage onMainPage() {
diff --git a/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWidgetSmokeTest.java b/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWidgetSmokeTest.java
new file mode 100644
index 0000000..3f482cf
--- /dev/null
+++ b/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWidgetSmokeTest.java
@@ -0,0 +1,78 @@
+package ru.qatools.school.webtests;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+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 WeatherWidgetSmokeTest {
+
+ public static final String CITY = "Winnipeg";
+
+ private MainPage onMainPage() {
+ return new MainPage(webDriverRule.getDriver());
+ }
+
+ private DefaultSteps defaultSteps;
+
+ @Rule
+ public TPInformerRule tms = new TPInformerRule("thebaldsoprano");
+
+ @Rule
+ public WebDriverRule webDriverRule = new WebDriverRule();
+
+ @Before
+ public void initSteps() { defaultSteps = new DefaultSteps(webDriverRule.getDriver());}
+
+ @Test
+ @Title("Should open main page with widget")
+ @TestCaseId("2")
+ public void shouldOpenMainPageWithWidget(){
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSeeWidget(onMainPage().getWeatherWidgetList().get(0));
+ }
+
+ @Test
+ @Title("Should see \"add new widget\" button")
+ @TestCaseId("3")
+ public void shouldSeeAddWidgetButton(){
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSeeAddWidgetButton(onMainPage().getNewWeatherWidgetCard().get(0));
+ }
+
+ @Test
+ @Title("Should see \"remove widget\" button")
+ @TestCaseId("4")
+ public void shouldSeeRemoveWidgetButton(){
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSeeRemoveWidgetButton(onMainPage().getWeatherWidgetList().get(0).getWidgetActions().getRemoveWidgetButton());
+ }
+
+ @Test
+ @Title("\"Add new widget\" button should add widget")
+ @TestCaseId("5")
+ public void shouldAddNewWidget(){
+ defaultSteps.openMainPageWithCity(CITY);
+ int buttonPushes = 3;
+ defaultSteps.pushNewWeatherButtonNTimes(buttonPushes);
+ defaultSteps.shouldSeeNumWidgets(buttonPushes + 1, onMainPage().getWeatherWidgetList());
+ }
+
+ @Test
+ @Title("Should remove all widgets")
+ @TestCaseId("6")
+ public void shouldRemoveWidgets(){
+ defaultSteps.openMainPageWithCity(CITY);
+ int buttonPushes = 1; //why not work on bigger clicks
+ defaultSteps.pushNewWeatherButtonNTimes(buttonPushes);
+ defaultSteps.removeNWidgets(buttonPushes+1);
+ defaultSteps.shouldBeNoWidgets(onMainPage().getWeatherWidgetList());
+ }
+}
diff --git a/pom.xml b/pom.xml
index a32202a..ee2a0ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,19 @@
1.8.5
+
+
+
+
+ com.jayway.restassured
+ rest-assured
+ 2.9.0
+
+
+ junit
+ junit
+ 4.12
+
junit
@@ -43,7 +56,7 @@
rest-assured
2.9.0
-
+
ru.yandex.qatools.allure
allure-junit-adaptor
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..7a1d2a4 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
@@ -4,6 +4,7 @@
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import ru.qatools.school.pages.blocks.WeatherWidget;
+import ru.qatools.school.pages.blocks.NewWeatherWidgetCard;
import ru.yandex.qatools.htmlelements.annotations.Name;
import ru.yandex.qatools.htmlelements.loader.decorator.HtmlElementDecorator;
import ru.yandex.qatools.htmlelements.loader.decorator.HtmlElementLocatorFactory;
@@ -19,12 +20,20 @@ public MainPage(WebDriver driver) {
PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this);
}
- @Name("Список виджетов")
+ @Name("Widgets list")
@FindBy(css = ".card.card_md")
- private List weatherWidget;
+ private List weatherWidgetList;
- public List getWeatherWidget() {
- return weatherWidget;
+ @Name("New weather widget card")
+ @FindBy(css = ".new-card")
+ private List newWeatherWidgetCard;
+
+ public List getNewWeatherWidgetCard() {
+ return newWeatherWidgetCard;
+ }
+
+ public List getWeatherWidgetList() {
+ return weatherWidgetList;
}
}
diff --git a/steps-module/src/main/java/ru/qatools/school/pages/blocks/NewWeatherWidgetCard.java b/steps-module/src/main/java/ru/qatools/school/pages/blocks/NewWeatherWidgetCard.java
new file mode 100644
index 0000000..d3912ef
--- /dev/null
+++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/NewWeatherWidgetCard.java
@@ -0,0 +1,28 @@
+package ru.qatools.school.pages.blocks;
+
+import org.openqa.selenium.Rectangle;
+import org.openqa.selenium.support.FindBy;
+import ru.yandex.qatools.htmlelements.annotations.Name;
+import ru.yandex.qatools.htmlelements.element.Button;
+import ru.yandex.qatools.htmlelements.element.HtmlElement;
+
+/**
+ * Created by Gregory on 4/15/2016.
+ */
+
+
+public class NewWeatherWidgetCard extends HtmlElement {
+
+ @Name("Add widget button")
+ @FindBy(css = ".new-card__symbol")
+ private Button addWidgetButton;
+
+ public Button getAddWidgetButton() {
+ return addWidgetButton;
+ }
+
+
+ public Rectangle getRect() {
+ return null;
+ }
+}
diff --git a/steps-module/src/main/java/ru/qatools/school/pages/blocks/WeatherWidget.java b/steps-module/src/main/java/ru/qatools/school/pages/blocks/WeatherWidget.java
index 3990d85..373ea3b 100644
--- a/steps-module/src/main/java/ru/qatools/school/pages/blocks/WeatherWidget.java
+++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/WeatherWidget.java
@@ -3,6 +3,7 @@
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
+import ru.qatools.school.pages.blocks.widgetblocks.WidgetActions;
import ru.qatools.school.pages.blocks.widgetblocks.WidgetText;
import ru.qatools.school.pages.blocks.widgetblocks.WidgetTitle;
import ru.yandex.qatools.htmlelements.annotations.Name;
@@ -13,17 +14,17 @@
*/
public class WeatherWidget extends HtmlElement {
- @Name("Заголовок виджета")
+ @Name("Widget title")
@FindBy(css = ".card-title")
private WidgetTitle widgetTitle;
- @Name("Текст виджета")
+ @Name("Widget text")
@FindBy(css = ".card-text")
private WidgetText widgetText;
- @Name("Панель управления виджетом")
+ @Name("Widget actions")
@FindBy(css = ".card-actions")
- private WebElement actions;
+ private WidgetActions widgetActions;
public WidgetText getWidgetText() {
return widgetText;
@@ -33,8 +34,8 @@ public WidgetTitle getWidgetTitle() {
return widgetTitle;
}
- public WebElement getActions() {
- return actions;
+ public WidgetActions getWidgetActions() {
+ return widgetActions;
}
public Rectangle getRect() {
diff --git a/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetActions.java b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetActions.java
new file mode 100644
index 0000000..bb194ab
--- /dev/null
+++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetActions.java
@@ -0,0 +1,23 @@
+package ru.qatools.school.pages.blocks.widgetblocks;
+
+import org.openqa.selenium.Rectangle;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import ru.yandex.qatools.htmlelements.annotations.Name;
+import ru.yandex.qatools.htmlelements.element.Button;
+import ru.yandex.qatools.htmlelements.element.HtmlElement;
+
+public class WidgetActions extends HtmlElement {
+
+ @Name("Remove widget button")
+ @FindBy(css = ".remove-card.btn.btn-default")
+ private WebElement removeWidgetButton;
+
+ public WebElement getRemoveWidgetButton() {
+ return removeWidgetButton;
+ }
+
+ public Rectangle getRect() {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetText.java b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetText.java
index 510d070..fbf918e 100644
--- a/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetText.java
+++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetText.java
@@ -11,7 +11,7 @@
*/
public class WidgetText extends HtmlElement {
- @Name("Картинка текущей погоды")
+ @Name("Current weather image")
@FindBy(css = ".weather-image")
private WebElement weatherImage;
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..d371988 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,6 +1,9 @@
package ru.qatools.school.pages.blocks.widgetblocks;
import org.openqa.selenium.Rectangle;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import ru.yandex.qatools.htmlelements.annotations.Name;
import ru.yandex.qatools.htmlelements.element.HtmlElement;
/**
@@ -8,6 +11,12 @@
*/
public class WidgetTitle extends HtmlElement {
+ @Name("Название города")
+ @FindBy(css = ".card-title__primary")
+ private WebElement widgetCity;
+
+ public WebElement getWidgetCity() {return widgetCity;}
+
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..4d04a30 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
@@ -3,9 +3,18 @@
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import ru.qatools.school.pages.MainPage;
+import ru.qatools.school.pages.blocks.NewWeatherWidgetCard;
+import ru.qatools.school.pages.blocks.WeatherWidget;
import ru.yandex.qatools.allure.annotations.Step;
+import ru.yandex.qatools.htmlelements.element.Button;
+
+import java.util.ArrayList;
+import java.util.List;
import static java.lang.String.format;
+import static org.hamcrest.core.Every.everyItem;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.isDisplayed;
@@ -22,16 +31,72 @@ public DefaultSteps(WebDriver driver) {
this.driver = driver;
}
- @Step("Открываем главную страницу для города «{0}»")
+ @Step("Open main page with weather of {0}")
public void openMainPageWithCity(String city) {
driver.get(format(MAIN_PAGE, city));
}
- @Step("Должны видеть на странице «{0}»")
- public void shouldSee(WebElement element) {
- assertThat("Должны видеть элемент", element, isDisplayed());
+ @Step("Should see weather widget")
+ public void shouldSeeWidget(WeatherWidget element) {
+ assertThat("Should see element", element, isDisplayed());
+ }
+
+ @Step("Should see \"add new widget\" button")
+ public void shouldSeeAddWidgetButton(NewWeatherWidgetCard element) {
+ assertThat("Should see button", element, isDisplayed());
+ }
+
+ @Step("Should see \"remove widget\" button")
+ public void shouldSeeRemoveWidgetButton(WebElement button) {
+ assertThat("Should see button", button, isDisplayed());
+ }
+
+ @Step("Should see all widgets")
+ public void shouldSeeWidget(List elements) {
+ assertThat("Should see elements", new ArrayList<>(elements), everyItem(isDisplayed()));
+ }
+
+ @Step("Should see {0} widgets")
+ public void shouldSeeNumWidgets(int num, List elements) {
+ assertThat("Must be " + num + " elements", elements.size(), is(num));
+ shouldSeeWidget(elements);
+ }
+
+ @Step("Widget city should be {0}")
+ public void shouldBeWeatherOfLinkCity(String linkCity, WebElement widgetCity) {
+ assertThat("Should be same city, that was in URL", linkCity, is(widgetCity.getText()));
}
+ @Step("Push \"add new weather widget\" button")
+ public void pushAddWidgetButton() {
+ onMainPage().getNewWeatherWidgetCard().get(0).getAddWidgetButton().click();
+ }
+
+ @Step("Push \"remove widget\" button")
+ public void pushRemoveWidgetButton() {
+ onMainPage().getWeatherWidgetList().get(0).getWidgetActions().getRemoveWidgetButton().click();
+ }
+
+ @Step("Remove {0} first widgets")
+ public void removeNWidgets(int n){
+ for(int i=0;i widgets){
+ assertEquals(0,widgets.size());
+ }
+
+
private MainPage onMainPage() {
return new MainPage(driver);
}