diff --git a/commons-module/src/test/java/ru/qatools/school/tp/ConnectedToTPTest.java b/commons-module/src/test/java/ru/qatools/school/tp/ConnectedToTPTest.java
index cc66bbe..62ddb1c 100644
--- a/commons-module/src/test/java/ru/qatools/school/tp/ConnectedToTPTest.java
+++ b/commons-module/src/test/java/ru/qatools/school/tp/ConnectedToTPTest.java
@@ -1,5 +1,6 @@
package ru.qatools.school.tp;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import ru.yandex.qatools.allure.annotations.TestCaseId;
@@ -18,13 +19,14 @@ public class ConnectedToTPTest {
public TPInformerRule tms = new TPInformerRule("ruletest");
+ @Ignore
@Test
@TestCaseId("1")
public void shouldMarkCaseStatusAsPassed() throws IOException, InterruptedException {
SECONDS.sleep(15);
}
-
+ @Ignore
@Test
@TestCaseId("2")
public void shouldFail() throws IOException, InterruptedException {
@@ -32,6 +34,7 @@ public void shouldFail() throws IOException, InterruptedException {
fail();
}
+ @Ignore
@Test
@TestCaseId("3")
public void shouldBroke() throws IOException, InterruptedException {
@@ -39,6 +42,7 @@ public void shouldBroke() throws IOException, InterruptedException {
throw new RuntimeException();
}
+ @Ignore
@Test
@TestCaseId("4")
public void shouldBeSkipped() throws IOException, InterruptedException {
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..b3ae94a 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
@@ -1,36 +1,117 @@
package ru.qatools.school.webtests;
+/* @author arrumm (Arkhipov Roman) */
+
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
+import org.openqa.selenium.Keys;
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.TestCaseId;
import ru.yandex.qatools.allure.annotations.Title;
public class WeatherWebTest {
- public static final String MOSCOW = "Moscow";
+ private static final String CITY = "Tomsk";
private DefaultSteps defaultSteps;
@Rule
public WebDriverRule webDriverRule = new WebDriverRule();
+ @Rule
+ public TPInformerRule tms = new TPInformerRule("arrumm");
+
@Before
public void initSteps() {
defaultSteps = new DefaultSteps(webDriverRule.getDriver());
}
+
+ @Test
+ @Title("Should see add widget button on the main page (URL without params)")
+ @TestCaseId("6")
+ public void shouldSeeAddWidgetButtonOnMainPageWithoutParams() {
+ defaultSteps.openMainPageWithoutParams();
+ defaultSteps.shouldSee(onMainPage().newCardButton());
+ }
+
@Test
- @Title("Должны видеть виджет на главной странице")
+ @Title("Should see widget on the main page")
+ @TestCaseId("7")
public void shouldSeeWidgetOnMainPage() {
- defaultSteps.openMainPageWithCity(MOSCOW);
- defaultSteps.shouldSee(onMainPage().getWeatherWidget().get(0));
+ defaultSteps.openMainPageWithCity(null);
+ defaultSteps.shouldSee(onMainPage().getFirstWidget());
+ }
+
+ @Test
+ @Title("Should see picture on widget shows weather")
+ @TestCaseId("11")
+ public void shouldSeeWeatherPicture() {
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSee(onMainPage().getFirstWidget().getWidgetText().getWeatherImage());
+ }
+
+
+ @Test
+ @Title("City name at widget title should match URL")
+ @TestCaseId("1")
+ public void shouldSeeWidgetWithCityInURL() {
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSeeTextInElement(
+ onMainPage().getFirstWidget().getWidgetTitle().getCityNameElement(),
+ CITY);
+ }
+
+ @Test
+ @Title("Should see one more widget on the main page after adding")
+ @TestCaseId("8")
+ public void shouldDetectOnceMoreWidget() {
+ defaultSteps.openMainPageWithCity(CITY);
+ int widgetsQ = onMainPage().widgets().size();
+ defaultSteps.clickOn(onMainPage().newCardButton());
+ defaultSteps.shouldBeWidgetsQuantityOnPage(onMainPage().widgets(), widgetsQ + 1);
+ defaultSteps.shouldSeeAllFrom(onMainPage().widgets());
+ }
+
+ //@Ignore
+ @Test
+ @Title("Should see widget title")
+ @TestCaseId("12")
+ public void shouldSeeWidgetTitle() {
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSee(onMainPage().getFirstWidget());
+ }
+
+ @Test
+ @Title("Should see temperature on the widget")
+ @TestCaseId("10")
+ public void shouldSeeTemperatureOnWidget() {
+ defaultSteps.openMainPageWithCity(CITY);
+ defaultSteps.shouldSee(onMainPage().getFirstWidget().getWidgetText().getTemperature());
+ }
+
+ @Test
+ @Title("Should see same city in the title entered by keyboard")
+ @TestCaseId("9")
+ public void shouldSeeCityInputFromKeyboard() {
+ defaultSteps.openMainPageWithCity(null);
+ defaultSteps.clickOn(onMainPage().newCardButton());
+ defaultSteps.clickOn(onMainPage().getFirstWidget().getWidgetTitle().getCityNameElement());
+ defaultSteps.clearIt(onMainPage().getFirstWidget().getWidgetTitle().getCityNameElement());
+ defaultSteps.sendKeysTo(onMainPage().getFirstWidget().getWidgetTitle().getCityNameElement(), CITY);
+ defaultSteps.sendKeysTo(onMainPage().getFirstWidget().getWidgetTitle().getCityNameElement(), Keys.ENTER);
+ defaultSteps.shouldSeeTextInElement(
+ onMainPage().getFirstWidget().getWidgetTitle().getCityNameElement(),
+ CITY);
}
private MainPage onMainPage() {
return new MainPage(webDriverRule.getDriver());
}
-}
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a32202a..95a9647 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,9 @@
2.53.0
1.15
1.8.5
+
+ UTF-8
+
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..16521e3 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
@@ -1,6 +1,7 @@
package ru.qatools.school.pages;
import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import ru.qatools.school.pages.blocks.WeatherWidget;
@@ -12,6 +13,7 @@
/**
* Created by kurau.
+ * edited by arrumm.
*/
public class MainPage {
@@ -21,10 +23,21 @@ public MainPage(WebDriver driver) {
@Name("Список виджетов")
@FindBy(css = ".card.card_md")
- private List weatherWidget;
+ private List widgets;
- public List getWeatherWidget() {
- return weatherWidget;
+ @Name("Кнопка добавления виджета на страницу")
+ @FindBy(css = ".new-card")
+ private WebElement newCardButton;
+
+ public List widgets() {
+ return widgets;
+ }
+
+ public WeatherWidget getFirstWidget() {
+ return widgets().get(0);
}
+ public WebElement newCardButton() {
+ return newCardButton;
+ }
}
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..0fd5f8a 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
@@ -6,6 +6,7 @@
import ru.qatools.school.pages.blocks.widgetblocks.WidgetText;
import ru.qatools.school.pages.blocks.widgetblocks.WidgetTitle;
import ru.yandex.qatools.htmlelements.annotations.Name;
+import ru.yandex.qatools.htmlelements.element.Button;
import ru.yandex.qatools.htmlelements.element.HtmlElement;
/**
@@ -33,11 +34,8 @@ public WidgetTitle getWidgetTitle() {
return widgetTitle;
}
- public WebElement getActions() {
- return actions;
- }
-
public Rectangle getRect() {
return null;
}
+
}
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..a00b4d9 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
@@ -15,6 +15,14 @@ public class WidgetText extends HtmlElement {
@FindBy(css = ".weather-image")
private WebElement weatherImage;
+ @Name("Значение температуры")
+ @FindBy(css = ".weather-temperature__digit")
+ private WebElement temperature;
+
+ public WebElement getTemperature() {
+ return temperature;
+ }
+
public WebElement getWeatherImage() {
return 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..88253f4 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
@@ -2,12 +2,25 @@
import org.openqa.selenium.Rectangle;
import ru.yandex.qatools.htmlelements.element.HtmlElement;
+import org.openqa.selenium.support.FindBy;
+import ru.yandex.qatools.htmlelements.annotations.Name;
+import ru.yandex.qatools.htmlelements.element.HtmlElement;
/**
* Created by kurau.
+ * added by arrumm (Arkhipov Roman)
*/
public class WidgetTitle extends HtmlElement {
+ @Name("Название города в заголовке")
+ @FindBy(css = ".inplace")
+ private WidgetTitle cityNameElement;
+
+
+ public HtmlElement getCityNameElement() {
+ return cityNameElement;
+ }
+
public Rectangle getRect() {
return null;
}
diff --git a/steps-module/src/main/java/ru/qatools/school/rules/WebDriverRule.java b/steps-module/src/main/java/ru/qatools/school/rules/WebDriverRule.java
index 418c363..1573eef 100644
--- a/steps-module/src/main/java/ru/qatools/school/rules/WebDriverRule.java
+++ b/steps-module/src/main/java/ru/qatools/school/rules/WebDriverRule.java
@@ -2,16 +2,24 @@
import org.junit.rules.ExternalResource;
import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxProfile;
+
+import java.io.File;
/**
* Created by kurau.
+ * added by arrumm (Arkhipov Roman)
*/
public class WebDriverRule extends ExternalResource {
private WebDriver driver;
protected void before() throws Throwable {
+
+ System.setProperty("webdriver.firefox.bin", "D:\\my Programs\\firefox\\firefox.exe");
this.driver = new FirefoxDriver();
}
diff --git a/steps-module/src/main/java/ru/qatools/school/steps/UserSteps.java b/steps-module/src/main/java/ru/qatools/school/steps/UserSteps.java
deleted file mode 100644
index f22648c..0000000
--- a/steps-module/src/main/java/ru/qatools/school/steps/UserSteps.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package ru.qatools.school.steps;
-
-import ru.qatools.school.data.Place;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-
-/**
- * @author lanwen (Merkushev Kirill)
- * @author gladnik (Gladkov Nikolai)
- */
-public class UserSteps {
-
- private Place place;
-
- private UserSteps() {
- }
-
- public static UserSteps user() {
- return new UserSteps();
- }
-
- public UserSteps goTo(Place place) {
- this.place = place;
- return this;
- }
-
- public UserSteps shouldBeAtPlace(Place expectedPlace) {
- assertThat("Places should match!", this.place, is(expectedPlace));
- return this;
- }
-}
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..3c162c2 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,18 +3,28 @@
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import ru.qatools.school.pages.MainPage;
+import ru.qatools.school.pages.blocks.WeatherWidget;
import ru.yandex.qatools.allure.annotations.Step;
+import java.util.List;
+
import static java.lang.String.format;
+import static org.hamcrest.Matchers.both;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.core.Every.everyItem;
import static org.junit.Assert.assertThat;
-import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.isDisplayed;
+import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.*;
/**
* Created by kurau.
+ *
+ * @author arrumm (Arkhipov Roman)
*/
public class DefaultSteps {
- public static final String MAIN_PAGE = "http://weather.lanwen.ru/#?cities=%s";
+ private static final String MAIN_PAGE = "http://weather.lanwen.ru/#?cities=%s";
+
+ private static final String MAIN_PAGE_WITHOUTPARAMETERS = "http://weather.lanwen.ru/";
private WebDriver driver;
@@ -27,9 +37,44 @@ public void openMainPageWithCity(String city) {
driver.get(format(MAIN_PAGE, city));
}
+ @Step("Открываем главную страницу как обычный пользователь")
+ public void openMainPageWithoutParams() {
+ driver.get(MAIN_PAGE_WITHOUTPARAMETERS );
+ }
+
@Step("Должны видеть на странице «{0}»")
public void shouldSee(WebElement element) {
- assertThat("Должны видеть элемент", element, isDisplayed());
+ assertThat("Должны видеть элемент", element, both(exists()).and(isDisplayed()));
+ }
+
+ @Step("Должны видеть на странице все элементы списка «{0}»")
+ public void shouldSeeAllFrom(List extends WebElement> widgets) {
+ assertThat("Видим не все элементы", (List) widgets, everyItem(both(exists()).and(isDisplayed())));
+ }
+
+ @Step("Текст «{0}» элемента должен быть «{1}»")
+ public void shouldSeeTextInElement(WebElement webElement, String text) {
+ assertThat("Текст элемента и ожидаемый не совпадают", webElement, hasText(text));
+ }
+
+ @Step("Должен кликнуться элемент «{0}»")
+ public void clickOn(WebElement element) {
+ element.click();
+ }
+
+ @Step("Количество виджетов на странице должно быть «{0}»")
+ public void shouldBeWidgetsQuantityOnPage(List widgets, int widgetsQuantity) {
+ assertThat("Количество виджетов на странице не равно ожидаемому", widgets, hasSize(widgetsQuantity));
+ }
+
+ @Step("Send keys to element «{0}»")
+ public void sendKeysTo(WebElement element, CharSequence ... keys) {
+ element.sendKeys(keys);
+ }
+
+ @Step("Clear element «{0}»")
+ public void clearIt(WebElement element) {
+ element.clear();
}
private MainPage onMainPage() {