From e7a165bc7de7e3b34ada144d6497da7433f59958 Mon Sep 17 00:00:00 2001 From: arrumm Date: Thu, 19 May 2016 13:03:10 +0300 Subject: [PATCH 1/3] first mobile test added --- .../school/mobiletests/MobileTest.java | 53 +++++++++++++++++++ steps-module/pom.xml | 13 ++++- .../school/rules/MobileDriverRule.java | 36 +++++++++++++ .../ru/qatools/school/screens/MainScreen.java | 44 +++++++++++++++ .../school/screens/SelectStationScreen.java | 41 ++++++++++++++ 5 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 commons-module/src/test/java/ru/qatools/school/mobiletests/MobileTest.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 diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/MobileTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/MobileTest.java new file mode 100644 index 0000000..e608455 --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/MobileTest.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; + +/** + * @author arrumm 19.05.2016. + */ +public class MobileTest { + + private static final String DEPARTURE_STATION = "Arbatskaya"; + private static final String DESTINATION_STATION = "Borisovo"; + private static final int MIN_TIME = 10; + + private MobileSteps mobileSteps; + + @Rule + public MobileDriverRule remoteWebDriverRule = new MobileDriverRule(); + + @Before + public void initSteps() { + mobileSteps = new MobileSteps(remoteWebDriverRule.getDriver()); + } + + @Test + @Title("Ожидаемое время поездки должно быть больше 10 минут") + public void shouldSeeGreaterTime() { + mobileSteps.tapOn(onMainScreen().fromStationField()); + mobileSteps.sendKeysTo(onSelectStationScreen().stationNameField(), DEPARTURE_STATION); + mobileSteps.tapOn(onSelectStationScreen().getFirstStation()); + + mobileSteps.tapOn(onMainScreen().toStationField()); + mobileSteps.sendKeysTo(onSelectStationScreen().stationNameField(), DESTINATION_STATION); + mobileSteps.tapOn(onSelectStationScreen().getFirstStation()); + + mobileSteps.shouldSeeGreaterThan(onMainScreen().timeField(), MIN_TIME); + } + + private MainScreen onMainScreen() { + return new MainScreen(remoteWebDriverRule.getDriver()); + } + + private SelectStationScreen onSelectStationScreen() { + return new SelectStationScreen(remoteWebDriverRule.getDriver()); + } + +} diff --git a/steps-module/pom.xml b/steps-module/pom.xml index 9bcfe79..ffcd8e7 100644 --- a/steps-module/pom.xml +++ b/steps-module/pom.xml @@ -45,7 +45,18 @@ com.jayway.restassured rest-assured - + + + org.slf4j + slf4j-simple + 1.7.21 + + + net.java.dev.jna + jna + 4.1.0 + + 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..713bfe6 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java @@ -0,0 +1,36 @@ +package ru.qatools.school.rules; + +import org.junit.rules.ExternalResource; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.remote.RemoteWebDriver; + +import java.net.MalformedURLException; +import java.net.URL; + +/** + * @author arrumm 19.05.2016. + */ +public class MobileDriverRule extends ExternalResource { + + private RemoteWebDriver driver; + + protected void before() throws MalformedURLException { + + 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); + } + + protected void after() { + driver.quit(); + } + + public RemoteWebDriver getDriver() { + return driver; + } + +} 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..15ddd34 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/screens/MainScreen.java @@ -0,0 +1,44 @@ +package ru.qatools.school.screens; + +import org.openqa.selenium.remote.RemoteWebDriver; +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; + +/** + * @author arrumm 19.05.2016. + */ +public class MainScreen { + + public MainScreen(RemoteWebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Поле ввода начальной станции") + @FindBy(id = "tv_from_name") + private HtmlElement fromStationField; + + @Name("Поле ввода конечной станции") + @FindBy(id = "tv_to_name") + private HtmlElement toStationField; + + @Name("Поле ожидаемое время поездки") + @FindBy(id = "tv_time") + private HtmlElement timeField; + + public HtmlElement fromStationField() { + return fromStationField; + } + + public HtmlElement toStationField() { + return toStationField; + } + + public HtmlElement timeField() { + return timeField; + } + +} 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..65cd2d3 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java @@ -0,0 +1,41 @@ +package ru.qatools.school.screens; + +import org.openqa.selenium.remote.RemoteWebDriver; +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; + +/** + * @author arrumm 19.05.2016. + */ +public class SelectStationScreen { + + public SelectStationScreen(RemoteWebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Поле ввода названия станции") + @FindBy(id = "filterTextId") + private HtmlElement stationNameField; + + @Name("Список результатов поиска станции для выбора") + @FindBy(id = "txtStationName") + private List stationSuggestResults; + + public HtmlElement stationNameField(){ + return stationNameField; + } + + public List stationSuggestResults(){ + return stationSuggestResults; + } + + public HtmlElement getFirstStation() { + return stationSuggestResults.get(0); + } +} From 868411e77eeb7334edcde16eb3033d665fb457ed Mon Sep 17 00:00:00 2001 From: arrumm Date: Thu, 19 May 2016 13:03:53 +0300 Subject: [PATCH 2/3] test changes --- .../school/steps/mobilesteps/mobilesteps.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/mobilesteps.java 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..1ead764 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/mobilesteps.java @@ -0,0 +1,83 @@ +package ru.qatools.school.steps.mobilesteps; + +import org.openqa.selenium.remote.RemoteWebDriver; +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; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.hamcrest.Matchers.greaterThan; +import static org.junit.Assert.assertThat; + +/** + * @author arrumm 19.05.2016. + */ +public class MobileSteps { + + private RemoteWebDriver driver; + + public MobileSteps(RemoteWebDriver driver) { + this.driver = driver; + } + + @Step("Открываем главный экран") + public void openMainScreen() { + driver.getCurrentUrl(); + } + + @Step("Открываем экран с выбором станций") + public void openStationScreen() { + driver.getCurrentUrl(); + } + + private MainScreen onMainScreen() { + return new MainScreen(driver); + } + + private SelectStationScreen onSelectStationScreen() { + return new SelectStationScreen(driver); + } + + @Step("Тапаем элемент {0}") + public void tapOn(HtmlElement element) { + element.click(); + } + + @Step("Вводим текст {1} в элемент {0}") + public void sendKeysTo(HtmlElement element, String keys) { + element.sendKeys(keys); + } + + @Step() + public void shouldSeeGreaterThan(HtmlElement element, int time){ + + int hours=0, minutes=0; + String strTime = element.getText(); + String regex_h = "h"; + String regex_min = "min"; + + Pattern p = Pattern.compile(regex_h); + Matcher m = p.matcher(strTime); + if (m.find()) { + + hours = Integer.parseInt(strTime.substring(0, m.start()-1).replaceAll( "[^\\d]", "" )); + strTime = strTime.substring(m.end()); + } + + p = Pattern.compile(regex_min); + m = p.matcher(strTime); + if (m.find()) { + minutes = Integer.parseInt(strTime.substring(0, m.start()-1).replaceAll( "[^\\d]", "" )); + } + + assertThat("Value should be greater", + hours*60+minutes, + greaterThan(time)); + + } + + +} From 9d40c76252cb54302098248842c666404d993c72 Mon Sep 17 00:00:00 2001 From: arrumm Date: Thu, 26 May 2016 11:53:11 +0300 Subject: [PATCH 3/3] change regexp to define elapsed time --- .../school/steps/mobilesteps/mobilesteps.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) 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 index 1ead764..a62abc9 100644 --- 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 @@ -6,7 +6,6 @@ import ru.yandex.qatools.allure.annotations.Step; import ru.yandex.qatools.htmlelements.element.HtmlElement; -import java.util.regex.Matcher; import java.util.regex.Pattern; import static org.hamcrest.Matchers.greaterThan; @@ -56,28 +55,24 @@ public void shouldSeeGreaterThan(HtmlElement element, int time){ int hours=0, minutes=0; String strTime = element.getText(); - String regex_h = "h"; - String regex_min = "min"; - Pattern p = Pattern.compile(regex_h); - Matcher m = p.matcher(strTime); - if (m.find()) { + String regex = "([\\s]+h+[\\s]|[\\s]+min)"; - hours = Integer.parseInt(strTime.substring(0, m.start()-1).replaceAll( "[^\\d]", "" )); - strTime = strTime.substring(m.end()); - } + Pattern p = Pattern.compile(regex); + + String[] mas = p.split(strTime); - p = Pattern.compile(regex_min); - m = p.matcher(strTime); - if (m.find()) { - minutes = Integer.parseInt(strTime.substring(0, m.start()-1).replaceAll( "[^\\d]", "" )); + if (mas.length == 1){ + minutes = Integer.parseInt(mas[0].replaceAll("\\s", "")); + } + else{ + hours = Integer.parseInt(mas[0].replaceAll("\\s", "")); + minutes = Integer.parseInt(mas[1].replaceAll("\\s", "")); } assertThat("Value should be greater", hours*60+minutes, greaterThan(time)); - } - }