From b6c5cd26f14a58b8f3330ad3c1cc613f39a057bc Mon Sep 17 00:00:00 2001 From: Yura Kulikov Date: Thu, 19 May 2016 01:51:08 +0300 Subject: [PATCH 1/4] mobile test init. But problem with russian words. (hope, solve soon :) --- .../school/mobiletests/MyFirstMobileTest.java | 53 +++++++++++++++++++ .../school/rules/MobileDriverRule.java | 31 +++++++++++ .../ru/qatools/school/screens/MainScreen.java | 50 +++++++++++++++++ .../school/screens/SelectStationScreen.java | 37 +++++++++++++ .../school/steps/mobilesteps/MobileSteps.java | 35 ++++++++++++ 5 files changed, 206 insertions(+) create mode 100644 commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java create mode 100644 steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java create mode 100644 steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java create mode 100644 steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java create mode 100644 steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/MobileSteps.java diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java new file mode 100644 index 0000000..a3dc4cc --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java @@ -0,0 +1,53 @@ +package ru.qatools.school.mobiletests; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import ru.qatools.school.rules.MobileDriverRule; +import ru.qatools.school.screens.MainScreen; +import ru.qatools.school.screens.SelectStationScreen; +import ru.qatools.school.steps.mobilesteps.MobileSteps; +import ru.yandex.qatools.allure.annotations.Title; + +import java.net.MalformedURLException; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +/** + * Created by aasx on 18.05.2016. + */ +public class MyFirstMobileTest { + + private static final String STATION_FROM="Aeroport"; + private static final String STATION_TO="Akademicheskaya"; + + private MobileSteps steps; + + + @Rule + public MobileDriverRule mobileDriverRule = new MobileDriverRule(); + + @Before + public void initSteps() throws MalformedURLException { steps = new MobileSteps(mobileDriverRule.getDriver()) ;} + + @Test + @Title("Время в пути между станциями {0} и {1} должно быть не менее 10 минут") + public void expectTravelTimeBetweenTwoDifferentStationMoreThatTenMinutes () throws MalformedURLException { + steps.clickOn(onMainScreen().getStationFrom()); + steps.clickOn(onSelectStationScreen().getEditText()); + steps.enterText(onSelectStationScreen().getEditText(),STATION_FROM); + steps.clickOn(onSelectStationScreen().getFirstCityFromList()); + steps.clickOn(onMainScreen().getStationTo()); + steps.clickOn(onSelectStationScreen().getEditText()); + steps.enterText(onSelectStationScreen().getEditText(), STATION_TO); + steps.clickOn(onSelectStationScreen().getFirstCityFromList()); + assertThat("время в пути должно быть больше 10 минут", onMainScreen().getTimeNeededInMinutes()<10 ); + } + + + private MainScreen onMainScreen() throws MalformedURLException { + return new MainScreen(mobileDriverRule.getDriver());} + private SelectStationScreen onSelectStationScreen() throws MalformedURLException { + return new SelectStationScreen(mobileDriverRule.getDriver());} +} diff --git a/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java b/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java new file mode 100644 index 0000000..5454efa --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java @@ -0,0 +1,31 @@ +package ru.qatools.school.rules; + +import org.junit.rules.ExternalResource; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.remote.RemoteWebDriver; + +import java.net.MalformedURLException; +import java.net.URL; + +/** + * Created by aasx on 18.05.2016. + */ +public class MobileDriverRule extends ExternalResource { + private WebDriver driver; + + protected void before() throws Throwable { + DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); + desiredCapabilities.setCapability("platformName", "Android"); + desiredCapabilities.setCapability("deviceName", "Android"); + desiredCapabilities.setCapability("app", "http://autoschool.github.io/files/ya-metro.apk"); + desiredCapabilities.setCapability("appWaitActivity", "ru.yandex.metro.MainActivity"); + this.driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); + } + public WebDriver getDriver() { + return driver; + } + protected void after() { + driver.quit(); + } +} diff --git a/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java b/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java new file mode 100644 index 0000000..aa66953 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java @@ -0,0 +1,50 @@ +package ru.qatools.school.screens; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +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; + +/** + * Created by aasx on 18.05.2016. + */ +public class MainScreen { + @Name("Station FROM") + @FindBy(id = "ru.yandex.metro:id/tv_from_name") + private HtmlElement StationFrom; + + + @Name("Station TO") + @FindBy(id = "ru.yandex.metro:id/tv_to_name") + private HtmlElement StationTo; + + @Name("Time in way") + @FindBy(id = "ru.yandex.metro:id/tv_time") + private HtmlElement timeNeeded; + + public MainScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + public HtmlElement getTimeNeeded() { + return timeNeeded; + } + + public int getTimeNeededInMinutes() { + int time = Integer.parseInt(timeNeeded.getText().substring(1, 2)); + return time; + } + + public HtmlElement getStationFrom() { + return StationFrom; + } + + public HtmlElement getStationTo() { + return StationTo; + } + + +} diff --git a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java new file mode 100644 index 0000000..f29746b --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java @@ -0,0 +1,37 @@ +package ru.qatools.school.screens; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +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; + +import java.util.List; + +/** + * Created by aasx on 18.05.2016. + */ +public class SelectStationScreen { + @Name("Enter city name text field") + @FindBy(id = "ru.yandex.metro:id/filterTextId") + private HtmlElement editText; + + @Name("Suggest List") + @FindBy(id = "filterTextId") + private List suggestList; + + public SelectStationScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + public HtmlElement getFirstCityFromList() { + return suggestList.get(0); + } + + public HtmlElement getEditText() { + return editText; + } + +} diff --git a/steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/MobileSteps.java b/steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/MobileSteps.java new file mode 100644 index 0000000..c1ab908 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/MobileSteps.java @@ -0,0 +1,35 @@ +package ru.qatools.school.steps.mobilesteps; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import ru.qatools.school.screens.MainScreen; +import ru.qatools.school.screens.SelectStationScreen; +import ru.yandex.qatools.allure.annotations.Step; +import ru.yandex.qatools.htmlelements.element.HtmlElement; + +/** + * Created by aasx on 18.05.2016. + */ +public class MobileSteps { + private WebDriver driver; + + public MobileSteps(WebDriver driver) { + this.driver = driver; + } + + + @Step("Кликаем по элементу {0} ") + public void clickOn(HtmlElement element) { + element.click(); + } + + @Step("Вводим текст «{1}» в элемент «{0}»") + public void enterText(HtmlElement element, String text) { + element.sendKeys(text); + } + + private MainScreen onMainScreen() {return new MainScreen(driver);} + private SelectStationScreen onSelectStationScreen(){return new SelectStationScreen(driver);} + + +} From f34370b1bad52a3eede215fb731ceaca108d7801 Mon Sep 17 00:00:00 2001 From: Yura Kulikov Date: Thu, 19 May 2016 11:52:54 +0300 Subject: [PATCH 2/4] now it's works with Russian and other languages and special chars! Hooray ! :) --- .../school/mobiletests/MyFirstMobileTest.java | 38 ++++++++++--------- .../school/rules/MobileDriverRule.java | 8 +++- .../ru/qatools/school/screens/MainScreen.java | 2 +- .../school/screens/SelectStationScreen.java | 4 +- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java index a3dc4cc..79574f0 100644 --- a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java @@ -12,42 +12,44 @@ import java.net.MalformedURLException; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.core.Is.is; +import static org.hamcrest.Matchers.greaterThan; /** * Created by aasx on 18.05.2016. */ public class MyFirstMobileTest { - private static final String STATION_FROM="Aeroport"; - private static final String STATION_TO="Akademicheskaya"; - - private MobileSteps steps; - - + private static final String STATION_FROM = "Арбатская"; + private static final String STATION_TO = "Борисово"; + private static final int MINIMUM_TRAVEL_TIME = 10; @Rule public MobileDriverRule mobileDriverRule = new MobileDriverRule(); + private MobileSteps steps; @Before - public void initSteps() throws MalformedURLException { steps = new MobileSteps(mobileDriverRule.getDriver()) ;} + public void initSteps() throws MalformedURLException { + steps = new MobileSteps(mobileDriverRule.getDriver()); + } @Test - @Title("Время в пути между станциями {0} и {1} должно быть не менее 10 минут") - public void expectTravelTimeBetweenTwoDifferentStationMoreThatTenMinutes () throws MalformedURLException { + @Title("Время в пути между станциями должно быть не менее 10 минут") + public void expectTravelTimeBetweenTwoDifferentStationMoreThatTenMinutes() throws MalformedURLException { steps.clickOn(onMainScreen().getStationFrom()); - steps.clickOn(onSelectStationScreen().getEditText()); - steps.enterText(onSelectStationScreen().getEditText(),STATION_FROM); - steps.clickOn(onSelectStationScreen().getFirstCityFromList()); + steps.enterText(onSelectStationScreen().getEditText(), STATION_FROM); + steps.clickOn(onSelectStationScreen().getFirstCityFromSuggestList()); steps.clickOn(onMainScreen().getStationTo()); - steps.clickOn(onSelectStationScreen().getEditText()); steps.enterText(onSelectStationScreen().getEditText(), STATION_TO); - steps.clickOn(onSelectStationScreen().getFirstCityFromList()); - assertThat("время в пути должно быть больше 10 минут", onMainScreen().getTimeNeededInMinutes()<10 ); + steps.clickOn(onSelectStationScreen().getFirstCityFromSuggestList()); + assertThat("время в пути должно быть больше минимального времени между двумя станциями", onMainScreen().getTimeNeededInMinutes(), greaterThan(MINIMUM_TRAVEL_TIME)); + System.out.println(onMainScreen().getTimeNeededInMinutes()); } private MainScreen onMainScreen() throws MalformedURLException { - return new MainScreen(mobileDriverRule.getDriver());} + return new MainScreen(mobileDriverRule.getDriver()); + } + private SelectStationScreen onSelectStationScreen() throws MalformedURLException { - return new SelectStationScreen(mobileDriverRule.getDriver());} + return new SelectStationScreen(mobileDriverRule.getDriver()); + } } diff --git a/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java b/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java index 5454efa..0a47986 100644 --- a/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java +++ b/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java @@ -5,7 +5,6 @@ import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; -import java.net.MalformedURLException; import java.net.URL; /** @@ -13,19 +12,24 @@ */ public class MobileDriverRule extends ExternalResource { private WebDriver driver; + private DesiredCapabilities desiredCapabilities; protected void before() throws Throwable { - DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); + desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("platformName", "Android"); desiredCapabilities.setCapability("deviceName", "Android"); desiredCapabilities.setCapability("app", "http://autoschool.github.io/files/ya-metro.apk"); desiredCapabilities.setCapability("appWaitActivity", "ru.yandex.metro.MainActivity"); + desiredCapabilities.setCapability("unicodeKeyboard", "true"); this.driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); } + public WebDriver getDriver() { return driver; } + protected void after() { + desiredCapabilities.setCapability("resetKeyboard", "true"); driver.quit(); } } diff --git a/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java b/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java index aa66953..36c5051 100644 --- a/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java +++ b/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java @@ -34,7 +34,7 @@ public HtmlElement getTimeNeeded() { } public int getTimeNeededInMinutes() { - int time = Integer.parseInt(timeNeeded.getText().substring(1, 2)); + int time = Integer.parseInt(timeNeeded.getText().substring(1, 3)); return time; } diff --git a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java index f29746b..9ce89e3 100644 --- a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java +++ b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java @@ -19,14 +19,14 @@ public class SelectStationScreen { private HtmlElement editText; @Name("Suggest List") - @FindBy(id = "filterTextId") + @FindBy(id = "ru.yandex.metro:id/txtStationName") private List suggestList; public SelectStationScreen(WebDriver driver) { PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); } - public HtmlElement getFirstCityFromList() { + public HtmlElement getFirstCityFromSuggestList() { return suggestList.get(0); } From 564b632536728a6e8db0ba833d19ef9af08045d8 Mon Sep 17 00:00:00 2001 From: Yura Kulikov Date: Thu, 19 May 2016 13:18:26 +0300 Subject: [PATCH 3/4] typo and minor fixes --- .../qatools/school/mobiletests/MyFirstMobileTest.java | 10 ++++++---- .../ru/qatools/school/screens/SelectStationScreen.java | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java index 79574f0..ab8d42b 100644 --- a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java @@ -22,6 +22,7 @@ public class MyFirstMobileTest { private static final String STATION_FROM = "Арбатская"; private static final String STATION_TO = "Борисово"; private static final int MINIMUM_TRAVEL_TIME = 10; + @Rule public MobileDriverRule mobileDriverRule = new MobileDriverRule(); private MobileSteps steps; @@ -35,13 +36,14 @@ public void initSteps() throws MalformedURLException { @Title("Время в пути между станциями должно быть не менее 10 минут") public void expectTravelTimeBetweenTwoDifferentStationMoreThatTenMinutes() throws MalformedURLException { steps.clickOn(onMainScreen().getStationFrom()); - steps.enterText(onSelectStationScreen().getEditText(), STATION_FROM); + steps.enterText(onSelectStationScreen().getStationName(), STATION_FROM); steps.clickOn(onSelectStationScreen().getFirstCityFromSuggestList()); steps.clickOn(onMainScreen().getStationTo()); - steps.enterText(onSelectStationScreen().getEditText(), STATION_TO); + steps.enterText(onSelectStationScreen().getStationName(), STATION_TO); steps.clickOn(onSelectStationScreen().getFirstCityFromSuggestList()); - assertThat("время в пути должно быть больше минимального времени между двумя станциями", onMainScreen().getTimeNeededInMinutes(), greaterThan(MINIMUM_TRAVEL_TIME)); - System.out.println(onMainScreen().getTimeNeededInMinutes()); + assertThat("время в пути должно быть больше минимального времени между двумя станциями", + onMainScreen().getTimeNeededInMinutes(), greaterThan(MINIMUM_TRAVEL_TIME)); + } diff --git a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java index 9ce89e3..7d95a10 100644 --- a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java +++ b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java @@ -14,9 +14,9 @@ * Created by aasx on 18.05.2016. */ public class SelectStationScreen { - @Name("Enter city name text field") + @Name("Enter station name") @FindBy(id = "ru.yandex.metro:id/filterTextId") - private HtmlElement editText; + private HtmlElement stationName; @Name("Suggest List") @FindBy(id = "ru.yandex.metro:id/txtStationName") @@ -30,8 +30,8 @@ public HtmlElement getFirstCityFromSuggestList() { return suggestList.get(0); } - public HtmlElement getEditText() { - return editText; + public HtmlElement getGetStationName() { + return stationName; } } From 5bf361308cc1aeec26552984994786aa246b0aa9 Mon Sep 17 00:00:00 2001 From: aasx Date: Fri, 20 May 2016 17:02:19 +0300 Subject: [PATCH 4/4] typo v2 --- .../java/ru/qatools/school/mobiletests/MyFirstMobileTest.java | 2 +- .../java/ru/qatools/school/screens/SelectStationScreen.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java index ab8d42b..c82f74a 100644 --- a/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/MyFirstMobileTest.java @@ -33,7 +33,7 @@ public void initSteps() throws MalformedURLException { } @Test - @Title("Время в пути между станциями должно быть не менее 10 минут") + @Title("Время в пути между станциями должно быть не менее 10 минут ") public void expectTravelTimeBetweenTwoDifferentStationMoreThatTenMinutes() throws MalformedURLException { steps.clickOn(onMainScreen().getStationFrom()); steps.enterText(onSelectStationScreen().getStationName(), STATION_FROM); diff --git a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java index 7d95a10..a43f673 100644 --- a/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java +++ b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java @@ -30,7 +30,7 @@ public HtmlElement getFirstCityFromSuggestList() { return suggestList.get(0); } - public HtmlElement getGetStationName() { + public HtmlElement getStationName() { return stationName; }