diff --git a/commons-module/pom.xml b/commons-module/pom.xml new file mode 100644 index 0000000..97cb03e --- /dev/null +++ b/commons-module/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + + school-2016 + ru.qatools.school + 1.0-SNAPSHOT + + + commons-module + jar + + Commons Module + + + + ru.qatools.school + steps-module + ${project.version} + + + ru.qatools.school + dbclient-module + ${project.version} + + + com.tngtech.java + junit-dataprovider + 1.10.4 + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + true + + + ru.yandex.qatools.allure + allure-maven-plugin + 2.0 + + + + + diff --git a/commons-module/src/test/java/ru/qatools/school/MyFirstTest.java b/commons-module/src/test/java/ru/qatools/school/MyFirstTest.java new file mode 100644 index 0000000..7b9da2e --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/MyFirstTest.java @@ -0,0 +1,53 @@ +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/mobiletests/AndroidMetroTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/AndroidMetroTest.java new file mode 100644 index 0000000..1b24721 --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/AndroidMetroTest.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.screens.MainScreen; +import ru.qatools.school.screens.SelectStationScreen; +import ru.qatools.school.rules.MobileDriverRule; +import ru.qatools.school.steps.mobilesteps.DefaultSteps; +import ru.yandex.qatools.allure.annotations.Title; + +import java.net.MalformedURLException; + +public class AndroidMetroTest { + + private static final String STATION_FROM = "Arbatskaya"; + private static final String STATION_TO = "Borisovo"; + private static final int MINIMUM_TIME = 10; + + private DefaultSteps defaultSteps; + + @Rule + public MobileDriverRule mobileDriverRule = new MobileDriverRule(); + + @Before + public void initSteps() { + defaultSteps = new DefaultSteps(mobileDriverRule.getDriver()); + } + + private MainScreen onMainScreen() { + return new MainScreen(mobileDriverRule.getDriver()); + } + + private SelectStationScreen onSelectStationScreen() { + return new SelectStationScreen(mobileDriverRule.getDriver()); + } + + @Test + @Title("Время в пути от Арбатской до Борисово должно быть более 10 минут") + public void shouldSeeCorrectTimeTravel() { + defaultSteps.clickOn(onMainScreen().getFromStationField()); + defaultSteps.enterText(onSelectStationScreen().getStationNameField(), STATION_FROM); + defaultSteps.clickOn(onSelectStationScreen().getStationsNameList().get(0)); + + defaultSteps.clickOn(onMainScreen().getToStationField()); + defaultSteps.enterText(onSelectStationScreen().getStationNameField(), STATION_TO); + defaultSteps.clickOn(onSelectStationScreen().getStationsNameList().get(0)); + + defaultSteps.shouldSeeTimeLongerThan(onMainScreen().getTimeField(), MINIMUM_TIME); + + } + +} diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/DrWebTest.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/DrWebTest.java new file mode 100644 index 0000000..761b7c4 --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/DrWebTest.java @@ -0,0 +1,134 @@ +package ru.qatools.school.mobiletests; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import ru.qatools.school.drwebscreens.*; +import ru.qatools.school.rules.MobileDriverRule; +import ru.qatools.school.steps.mobilesteps.DefaultSteps; +import ru.yandex.qatools.allure.annotations.Title; + +public class DrWebTest { + + /*private static final String STATION_FROM = "Arbatskaya"; + private static final String STATION_TO = "Borisovo"; + private static final int MINIMUM_TIME = 10;*/ + + private DefaultSteps defaultSteps; + + @Rule + public MobileDriverRule mobileDriverRule = new MobileDriverRule(); + + @Before + public void initSteps() { + defaultSteps = new DefaultSteps(mobileDriverRule.getDriver()); + } + + private MainScreen onMainScreen() { + return new MainScreen(mobileDriverRule.getDriver()); + } + + private LicensScreen onLicensScreen() { + return new LicensScreen(mobileDriverRule.getDriver()); + } + + private ScannerScreen onScannerScreen() { + return new ScannerScreen(mobileDriverRule.getDriver()); + } + + private AntispamScreen onAntispamScreen() { + return new AntispamScreen(mobileDriverRule.getDriver()); + } + + private UrlFilterScreen onUrlFilterScreen() { + return new UrlFilterScreen(mobileDriverRule.getDriver()); + } + + private AntitheftScreen onAntitheftScreen() { + return new AntitheftScreen(mobileDriverRule.getDriver()); + } + + private FirewallScreen onFirewallScreen() { + return new FirewallScreen(mobileDriverRule.getDriver()); + } + + private SecurityAuditorScreen onSecurityAuditorScreen() { + return new SecurityAuditorScreen(mobileDriverRule.getDriver()); + } + + @Test + @Title("Принимаем лицензию и проходимся по экранам приложения") + public void shouldClickClick() { + defaultSteps.clickOn(onLicensScreen().getStatisticCheckbox()); + defaultSteps.clickOn(onLicensScreen().getLicensAcceptButton()); + + /*defaultSteps.clickOn(onMainScreen().getScaner()); + defaultSteps.clickOn(onScannerScreen().getBackButton()); + + defaultSteps.clickOn(onMainScreen().getAntispam()); + defaultSteps.clickOn(onAntispamScreen().getFilteringProfileList().get(1)); + + defaultSteps.clickOn(onMainScreen().getUrlFilter()); + defaultSteps.clickOn(onUrlFilterScreen().getUrlSwitcher()); + defaultSteps.clickOn(onUrlFilterScreen().getUrlFilterEnableBatton()); + defaultSteps.clickOn(onUrlFilterScreen().getUrlCategoriesList().get(4)); + defaultSteps.clickOn(onUrlFilterScreen().getRestrictAccess()); + defaultSteps.clickOn(onUrlFilterScreen().getBackButton());*/ + + //defaultSteps.clickOn(onMainScreen().getAntitheft()); + /*defaultSteps.clickOn(onAntitheftScreen().getAntitheftSwitcher()); + defaultSteps.enterText(onAntitheftScreen().getPasswordEditField(), "pppp"); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.enterText(onAntitheftScreen().getPasswordEditField(), "pppp"); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonBack()); + defaultSteps.clickOn(onAntitheftScreen().getCrossButton());*/ + + /*defaultSteps.clickOn(onAntitheftScreen().getAntitheftEnableBatton()); + defaultSteps.enterText(onAntitheftScreen().getPasswordEditField(), "pppp"); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.enterText(onAntitheftScreen().getPasswordEditField(), "pppp"); + defaultSteps.clickOn(onAntitheftScreen().getShowPasswordButton()); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.clickOn(onAntitheftScreen().getAddContactButton()); + defaultSteps.clickOn(onAntitheftScreen().getNewContactCategory()); + defaultSteps.enterText(onAntitheftScreen().getPhoneNumberEditorField(), "12345"); + defaultSteps.clickOn(onAntitheftScreen().getSaveBatton()); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.enterText(onAntitheftScreen().getEmailEditField(), "123@ya.ru"); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.enterText(onAntitheftScreen().getBlockTextField(), " Ururu!!! 777"); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue()); + defaultSteps.clickOn(onAntitheftScreen().getCancelBatton()); + + defaultSteps.clickOn(onMainScreen().getAntitheft()); + defaultSteps.enterText(onAntitheftScreen().getPasswordEditField(), "pppp"); + defaultSteps.clickOn(onAntitheftScreen().getAntitheftWizardBattonContinue());*/ + + defaultSteps.clickOn(onMainScreen().getFirewall()); + /*defaultSteps.clickOn(onFirewallScreen().getFirewallEnableBatton()); + defaultSteps.clickOn(onFirewallScreen().getVPNTrustCheckbox()); + defaultSteps.clickOn(onFirewallScreen().getVPNOkButton()); + defaultSteps.clickOn(onFirewallScreen().getFirewallSwitcher());*/ + defaultSteps.clickOn(onFirewallScreen().getFirewallTabList().get(1)); + defaultSteps.clickOn(onFirewallScreen().getFirewallTabList().get(2)); + defaultSteps.clickOn(onFirewallScreen().getFirewallTabList().get(0)); + defaultSteps.clickOn(onFirewallScreen().getBackButton()); + + defaultSteps.clickOn(onMainScreen().getAuditor()); + defaultSteps.clickOn(onSecurityAuditorScreen().getBackButton()); + + //defaultSteps.clickOn(onScannerScreen().getScannerList().get(0)); + /*defaultSteps.clickOn(onMainScreen().getFromStationField()); + defaultSteps.enterText(onSelectStationScreen().getStationNameField(), STATION_FROM); + defaultSteps.clickOn(onSelectStationScreen().getStationsNameList().get(0)); + + defaultSteps.clickOn(onMainScreen().getToStationField()); + defaultSteps.enterText(onSelectStationScreen().getStationNameField(), STATION_TO); + defaultSteps.clickOn(onSelectStationScreen().getStationsNameList().get(0)); + + defaultSteps.shouldSeeTimeLongerThan(onMainScreen().getTimeField(), MINIMUM_TIME);*/ + + } + +} diff --git a/commons-module/src/test/java/ru/qatools/school/mobiletests/DrWebTest_01.java b/commons-module/src/test/java/ru/qatools/school/mobiletests/DrWebTest_01.java new file mode 100644 index 0000000..38ef3dd --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/mobiletests/DrWebTest_01.java @@ -0,0 +1,84 @@ +package ru.qatools.school.mobiletests; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import ru.qatools.school.drwebscreens.*; +import ru.qatools.school.rules.MobileDriverRule; +import ru.qatools.school.steps.mobilesteps.DefaultSteps; +import ru.yandex.qatools.allure.annotations.Title; + +public class DrWebTest_01 { + + /*private static final String STATION_FROM = "Arbatskaya"; + private static final String STATION_TO = "Borisovo"; + private static final int MINIMUM_TIME = 10;*/ + + private DefaultSteps defaultSteps; + + @Rule + public MobileDriverRule mobileDriverRule = new MobileDriverRule(); + + @Before + public void initSteps() { + defaultSteps = new DefaultSteps(mobileDriverRule.getDriver()); + } + + private MainScreen onMainScreen() { + return new MainScreen(mobileDriverRule.getDriver()); + } + + private LicensScreen onLicensScreen() { + return new LicensScreen(mobileDriverRule.getDriver()); + } + + private ScannerScreen onScannerScreen() { + return new ScannerScreen(mobileDriverRule.getDriver()); + } + + private AntispamScreen onAntispamScreen() { + return new AntispamScreen(mobileDriverRule.getDriver()); + } + + private UrlFilterScreen onUrlFilterScreen() { + return new UrlFilterScreen(mobileDriverRule.getDriver()); + } + + @Before + public void shouldClickClickLicensScreen() { + defaultSteps.clickOn(onLicensScreen().getStatisticCheckbox()); + defaultSteps.clickOn(onLicensScreen().getLicensAcceptButton()); + } + + /*@Test + @Title("Принимаем лицензионное соглашение") + public void shouldClickClickLicensScreen() { + defaultSteps.clickOn(onLicensScreen().getStatisticCheckbox()); + defaultSteps.clickOn(onLicensScreen().getLicensAcceptButton()); + }*/ + + @Test + @Title("Прокликиваем сканнер") + public void shouldClickClickScannerScreen() { + defaultSteps.clickOn(onMainScreen().getScaner()); + defaultSteps.clickOn(onScannerScreen().getBackButton()); + } + + @Test + @Title("Прокликиваем ") + public void shouldClickClickAntispamScreen() { + defaultSteps.clickOn(onMainScreen().getAntispam()); + defaultSteps.clickOn(onAntispamScreen().getFilteringProfileList().get(1)); + } + + @Test + @Title("Принимаем лицензию и проходимся по экранам приложения") + public void shouldClickClickUrlFilterScreen() { + defaultSteps.clickOn(onUrlFilterScreen().getUrlSwitcher()); + defaultSteps.clickOn(onUrlFilterScreen().getUrlFilterEnableBatton()); + defaultSteps.clickOn(onUrlFilterScreen().getUrlCategoriesList().get(1)); + defaultSteps.clickOn(onUrlFilterScreen().getRestrictAccess()); + defaultSteps.clickOn(onUrlFilterScreen().getBackButton()); + } + +} 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 new file mode 100644 index 0000000..cc66bbe --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/tp/ConnectedToTPTest.java @@ -0,0 +1,48 @@ +package ru.qatools.school.tp; + +import org.junit.Rule; +import org.junit.Test; +import ru.yandex.qatools.allure.annotations.TestCaseId; + +import java.io.IOException; + +import static java.util.concurrent.TimeUnit.SECONDS; +import static junit.framework.TestCase.fail; +import static org.hamcrest.Matchers.is; +import static org.junit.Assume.assumeThat; + + +public class ConnectedToTPTest { + + @Rule + public TPInformerRule tms = new TPInformerRule("ruletest"); + + + @Test + @TestCaseId("1") + public void shouldMarkCaseStatusAsPassed() throws IOException, InterruptedException { + SECONDS.sleep(15); + } + + + @Test + @TestCaseId("2") + public void shouldFail() throws IOException, InterruptedException { + SECONDS.sleep(5); + fail(); + } + + @Test + @TestCaseId("3") + public void shouldBroke() throws IOException, InterruptedException { + SECONDS.sleep(5); + throw new RuntimeException(); + } + + @Test + @TestCaseId("4") + public void shouldBeSkipped() throws IOException, InterruptedException { + SECONDS.sleep(5); + assumeThat(true, is(false)); + } +} 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 new file mode 100644 index 0000000..a4c5a40 --- /dev/null +++ b/commons-module/src/test/java/ru/qatools/school/webtests/WeatherWebTest.java @@ -0,0 +1,36 @@ +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.yandex.qatools.allure.annotations.Title; + +public class WeatherWebTest { + + public static final String MOSCOW = "Moscow"; + + private DefaultSteps defaultSteps; + + @Rule + public WebDriverRule webDriverRule = new WebDriverRule(); + + @Before + public void initSteps() { + defaultSteps = new DefaultSteps(webDriverRule.getDriver()); + } + + @Test + @Title("Должны видеть виджет на главной странице") + public void shouldSeeWidgetOnMainPage() { + defaultSteps.openMainPageWithCity(MOSCOW); + defaultSteps.shouldSee(onMainPage().getWeatherWidget().get(0)); + } + + private MainPage onMainPage() { + return new MainPage(webDriverRule.getDriver()); + } + +} diff --git a/dbclient-module/pom.xml b/dbclient-module/pom.xml new file mode 100644 index 0000000..2994039 --- /dev/null +++ b/dbclient-module/pom.xml @@ -0,0 +1,28 @@ + + + + school-2016 + ru.qatools.school + 1.0-SNAPSHOT + + 4.0.0 + + dbclient-module + + + + org.jooq + jooq + 3.7.3 + + + mysql + mysql-connector-java + 5.1.6 + + + + + \ No newline at end of file diff --git a/dbclient-module/src/main/java/ru/qatools/school/DbClient.java b/dbclient-module/src/main/java/ru/qatools/school/DbClient.java new file mode 100644 index 0000000..12e1204 --- /dev/null +++ b/dbclient-module/src/main/java/ru/qatools/school/DbClient.java @@ -0,0 +1,49 @@ +package ru.qatools.school; + +import org.jooq.*; +import org.jooq.impl.DSL; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.DSL.table; + +/** + * Created by omaz on 27.04.16. + */ +public class DbClient { + private static final String CONNECTION_STRING = + System.getProperty("db.url", "jdbc:mysql://db.host.ru:3310/db_name"); + private static final String USER = System.getProperty("db.user", "user"); + private static final String PASSWORD = System.getProperty("db.password", "password");; + + private Connection connection; + private DSLContext create; + + public DbClient() { + try { + connection = DriverManager.getConnection(CONNECTION_STRING, USER, PASSWORD); + } catch (SQLException e) { + throw new DbClientException("Не удалось установить подключение к " + CONNECTION_STRING, e); + } + create = DSL.using(connection, SQLDialect.MYSQL); + } + + public String getCityById(Integer id) { + Record1 result = create.select(field("name")) + .from(table("table_name")) + .where(field("id").equal(id)) + .fetchOne(); + return result.getValue(0, String.class); + } + + public void close() { + try { + connection.close(); + } catch (SQLException e) { + throw new DbClientException("Не удалось закрыть подключение к " + CONNECTION_STRING, e); + } + } +} diff --git a/dbclient-module/src/main/java/ru/qatools/school/DbClientException.java b/dbclient-module/src/main/java/ru/qatools/school/DbClientException.java new file mode 100644 index 0000000..31e9e94 --- /dev/null +++ b/dbclient-module/src/main/java/ru/qatools/school/DbClientException.java @@ -0,0 +1,25 @@ +package ru.qatools.school; + +/** + * Created by omaz on 27.04.16. + */ +public class DbClientException extends RuntimeException { + public DbClientException() { + } + + public DbClientException(String message) { + super(message); + } + + public DbClientException(String message, Throwable cause) { + super(message, cause); + } + + public DbClientException(Throwable cause) { + super(cause); + } + + public DbClientException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/pom.xml b/pom.xml index 206b663..2f0da8b 100644 --- a/pom.xml +++ b/pom.xml @@ -1,23 +1,121 @@ - 4.0.0 ru.qatools.school school-2016 - pom 1.0-SNAPSHOT - + pom + + Automation Foreva + First automation project ever + steps-module + commons-module + dbclient-module - Automation Foreva - First automation project ever - + + 1.8 + + 1.4.23 + 2.53.0 + 1.15 + 1.8.5 + + - + + junit + junit + 4.12 + - - \ No newline at end of file + + + + + + + com.jayway.restassured + rest-assured + 2.9.0 + + + + ru.yandex.qatools.allure + allure-junit-adaptor + ${allure.version} + + + org.seleniumhq.selenium + selenium-java + ${selenium.version} + + + ru.yandex.qatools.htmlelements + htmlelements-java + ${htmlelements.version} + + + org.apache.commons + commons-lang3 + 3.4 + + + org.hamcrest + hamcrest-all + 1.3 + + + ru.yandex.qatools.htmlelements + htmlelements-matchers + 1.12 + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.0 + + ${compiler.version} + ${compiler.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" + + + + listener + ru.yandex.qatools.allure.junit.AllureRunListener + + + + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + + + + + + + diff --git a/steps-module/pom.xml b/steps-module/pom.xml index fa52f60..9bcfe79 100644 --- a/steps-module/pom.xml +++ b/steps-module/pom.xml @@ -1,18 +1,51 @@ - + 4.0.0 + school-2016 ru.qatools.school 1.0-SNAPSHOT - - 4.0.0 - jar - + steps-module + jar + Logic Module + + + ru.yandex.qatools.allure + allure-junit-adaptor + + + org.seleniumhq.selenium + selenium-java + + + ru.yandex.qatools.htmlelements + htmlelements-java + + + org.apache.commons + commons-lang3 + + + org.hamcrest + hamcrest-all + + + ru.yandex.qatools.htmlelements + htmlelements-matchers + + + + com.jayway.restassured + rest-assured + + + - \ No newline at end of file + diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/AntispamScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/AntispamScreen.java new file mode 100644 index 0000000..1bd0a92 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/AntispamScreen.java @@ -0,0 +1,29 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class AntispamScreen { + + public AntispamScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Список профилей фильтрации") + @FindBy(id = "label") + private List filteringProfileList; + + public List getFilteringProfileList() { + return filteringProfileList; + } +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/AntitheftScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/AntitheftScreen.java new file mode 100644 index 0000000..60ca137 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/AntitheftScreen.java @@ -0,0 +1,191 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class AntitheftScreen { + + public AntitheftScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Выключатель Антивора") + @FindBy(id = "switcher") + private HtmlElement antitheftSwitcher; + + public HtmlElement getAntitheftSwitcher() { + return antitheftSwitcher; + } + + @Name("Кнопка назад") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement backButton; + + public HtmlElement getBackButton() { + return backButton; + } + + @Name("Кнопка включения Антивора") + @FindBy(id = "button") + private HtmlElement antitheftEnableBatton; + + public HtmlElement getAntitheftEnableBatton() { + return antitheftEnableBatton; + } + + @Name("Крестик в окнах конструктора Антивора") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement crossButton; + + public HtmlElement getCrossButton() { + return crossButton; + } + + @Name("Кнопка Назад в окнах конструктора Антивора") + @FindBy(id = "button_back") + private HtmlElement antitheftWizardBattonBack; + + public HtmlElement getAntitheftWizardBattonBack() { + return antitheftWizardBattonBack; + } + + @Name("Кнопка Вперед в окнах конструктора Антивора") + @FindBy(id = "button_next") + private HtmlElement antitheftWizardBattonContinue; + + public HtmlElement getAntitheftWizardBattonContinue() { + return antitheftWizardBattonContinue; + } + + @Name("Поле ввода пароля в окнах конструктора Антивора") + @FindBy(id = "PasswordEdit") + private HtmlElement passwordEditField; + + public HtmlElement getPasswordEditField() { + return passwordEditField; + } + + @Name("Кнопка Посмотреть пароль в окнах конструктора Антивора") + @FindBy(id = "showPasswordButton") + private HtmlElement showPasswordButton; + + public HtmlElement getShowPasswordButton() { + return showPasswordButton; + } + + @Name("Кнопка Добавить контакт в окнах конструктора Антивора") + @FindBy(id = "fragment_list_add_button") + private HtmlElement addContactButton; + + public HtmlElement getAddContactButton() { + return addContactButton; + } + + @Name("Список категорий откуда добавить контакт друга") + @FindBy(className = "android.widget.RelativeLayout") + private List addContactCategoriesList; + + public List getAddContactCategoriesList() { + return addContactCategoriesList; + } + + public HtmlElement getNewContactCategory() { + return addContactCategoriesList.get(3); + } + + @Name("Поле ввода номера телефона в окне добавления нового контакта друга") + @FindBy(id = "PhoneNumberInfoEditorNumber") + private HtmlElement phoneNumberEditorField; + + public HtmlElement getPhoneNumberEditorField() { + return phoneNumberEditorField; + } + + @Name("Кнопка Сохранить") + @FindBy(id = "save") + private HtmlElement saveBatton; + + public HtmlElement getSaveBatton() { + return saveBatton; + } + + @Name("Поле ввода адреса электронной почты") + @FindBy(id = "emailEdit") + private HtmlElement emailEditField; + + public HtmlElement getEmailEditField() { + return emailEditField; + } + + @Name("Поле ввода текста для экрана блокировки") + @FindBy(id = "blockText") + private HtmlElement blockTextField; + + public HtmlElement getBlockTextField() { + return blockTextField; + } + + @Name("Кнопка Отменить") + @FindBy(id = "com.android.settings:id/cancel_button") + private HtmlElement cancelBatton; + + public HtmlElement getCancelBatton() { + return cancelBatton; + } + + /*@Name("Список категорий сайтов") + @FindBy(id = "ListItemMain") + private List urlCategoriesList; + + public List getUrlCategoriesList() { + return urlCategoriesList; + } + + @Name("Кнопка назад") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement backButton; + + public HtmlElement getBackButton() { + return backButton; + } + + @Name("Выключатель URL-фильтра") + @FindBy(id = "switcher") + private HtmlElement urlSwitcher; + + public HtmlElement getUrlSwitcher() { + return urlSwitcher; + } + + @Name("Кнопка включения URL-фильтра") + @FindBy(id = "switcher") + private HtmlElement urlFilterEnableBatton; + + public HtmlElement getUrlFilterEnableBatton() { + return urlFilterEnableBatton; + } + + @Name("Список команд в поп-апе: запретить доступ и разреить доступ") + @FindBy(id = "title") + private List urlPermissionList; + + public HtmlElement getRestrictAccess() { + return urlPermissionList.get(0); + } + + public HtmlElement getAllowAccess() { + return urlPermissionList.get(1); + } + */ + +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/FirewallScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/FirewallScreen.java new file mode 100644 index 0000000..59b3793 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/FirewallScreen.java @@ -0,0 +1,78 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class FirewallScreen { + + public FirewallScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Выключатель Брандмауэра") + @FindBy(id = "switcher") + private HtmlElement firewallSwitcher; + + public HtmlElement getFirewallSwitcher() { + return firewallSwitcher; + } + + @Name("Кнопка назад") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement backButton; + + public HtmlElement getBackButton() { + return backButton; + } + + @Name("Кнопка включения Брандмауэра") + @FindBy(id = "button") + private HtmlElement firewallEnableBatton; + + public HtmlElement getFirewallEnableBatton() { + return firewallEnableBatton; + } + + @Name("Чекбокс доверия приложению (VPN)") + @FindBy(id = "com.android.vpndialogs:id/check") + private HtmlElement vpnTrustCheckbox; + + public HtmlElement getVPNTrustCheckbox() { + return vpnTrustCheckbox; + } + + @Name("Кнопка OK (VPN)") + @FindBy(id = "android:id/button1") + private HtmlElement vpnOkButton; + + public HtmlElement getVPNOkButton() { + return vpnOkButton; + } + + @Name("Кнопка Отмена (VPN)") + @FindBy(id = "android:id/button2") + private HtmlElement vpnCancelButton; + + public HtmlElement getVPNCancelButton() { + return vpnCancelButton; + } + + @Name("Список категорий сайтов") + @FindBy(className = "android.support.v7.app.ActionBar$Tab") + private List firewallTabList; + + public List getFirewallTabList() { + return firewallTabList; + } + +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/LicensScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/LicensScreen.java new file mode 100644 index 0000000..fe651ee --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/LicensScreen.java @@ -0,0 +1,59 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class LicensScreen { + + public LicensScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Send statistic Checkbox") + @FindBy(id = "statCheckbox") + private HtmlElement statisticCheckbox; + + public HtmlElement getStatisticCheckbox() { + return statisticCheckbox; + } + + @Name("Licens accept button") + @FindBy(id = "button1") + private HtmlElement licensAcceptButton; + + public HtmlElement getLicensAcceptButton() { + return licensAcceptButton; + } + + /*@Name("���� ����� ��������� ������� - From") + @FindBy(id = "tv_from_name") + private HtmlElement fromStationField; + + public HtmlElement getFromStationField() { + return fromStationField; + } + + @Name("���� ����� �������� ������� - To") + @FindBy(id = "tv_to_name") + private HtmlElement toStationField; + + public HtmlElement getToStationField() { + return toStationField; + } + + @Name("�������������� ����� � ����") + @FindBy(id = "tv_time") + private HtmlElement timeField; + + public HtmlElement getTimeField() { + return timeField; + }*/ +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/MainScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/MainScreen.java new file mode 100644 index 0000000..f0eeac3 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/MainScreen.java @@ -0,0 +1,92 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class MainScreen { + + public MainScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Scaner") + @FindBy(id = "component_scaner") + private HtmlElement scaner; + + public HtmlElement getScaner() { + return scaner; + } + + @Name("Antispam") + @FindBy(id = "component_antispam") + private HtmlElement antispam; + + public HtmlElement getAntispam() { + return antispam; + } + + @Name("URL filtr") + @FindBy(id = "component_urlfiltr") + private HtmlElement urlFilter; + + public HtmlElement getUrlFilter() { + return urlFilter; + } + + @Name("Antitheft") + @FindBy(id = "component_antitheft") + private HtmlElement antitheft; + + public HtmlElement getAntitheft() { + return antitheft; + } + + @Name("Firewall") + @FindBy(id = "component_firewall") + private HtmlElement firewall; + + public HtmlElement getFirewall() { + return firewall; + } + + @Name("Security Auditor") + @FindBy(id = "component_helper") + private HtmlElement auditor; + + public HtmlElement getAuditor() { + return auditor; + } + + + /*@Name("���� ����� ��������� ������� - From") + @FindBy(id = "tv_from_name") + private HtmlElement fromStationField; + + public HtmlElement getFromStationField() { + return fromStationField; + } + + @Name("���� ����� �������� ������� - To") + @FindBy(id = "tv_to_name") + private HtmlElement toStationField; + + public HtmlElement getToStationField() { + return toStationField; + } + + @Name("�������������� ����� � ����") + @FindBy(id = "tv_time") + private HtmlElement timeField; + + public HtmlElement getTimeField() { + return timeField; + }*/ +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/ScannerScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/ScannerScreen.java new file mode 100644 index 0000000..a2d91ef --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/ScannerScreen.java @@ -0,0 +1,38 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class ScannerScreen { + + public ScannerScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Список типов проверки") + @FindBy(id = "ListItemMain") + private List scannerList; + + public List getScannerList() { + return scannerList; + } + + @Name("Кнопка назад") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement backButton; + + public HtmlElement getBackButton() { + return backButton; + } + +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/SecurityAuditorScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/SecurityAuditorScreen.java new file mode 100644 index 0000000..e822149 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/SecurityAuditorScreen.java @@ -0,0 +1,38 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class SecurityAuditorScreen { + + public SecurityAuditorScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Список типов проверки") + @FindBy(className = "android.widget.LinearLayout") + private List problemsCategoriesList; + + public List getProblemsCategoriesList() { + return problemsCategoriesList; + } + + @Name("Кнопка назад") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement backButton; + + public HtmlElement getBackButton() { + return backButton; + } + +} diff --git a/steps-module/src/main/java/ru/qatools/school/drwebscreens/UrlFilterScreen.java b/steps-module/src/main/java/ru/qatools/school/drwebscreens/UrlFilterScreen.java new file mode 100644 index 0000000..af14110 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/drwebscreens/UrlFilterScreen.java @@ -0,0 +1,66 @@ +package ru.qatools.school.drwebscreens; + +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 o.polyakov on 18.05.2016. + */ +public class UrlFilterScreen { + + public UrlFilterScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Список категорий сайтов") + @FindBy(id = "ListItemMain") + private List urlCategoriesList; + + public List getUrlCategoriesList() { + return urlCategoriesList; + } + + @Name("Кнопка назад") + @FindBy(className = "android.widget.ImageButton") + private HtmlElement backButton; + + public HtmlElement getBackButton() { + return backButton; + } + + @Name("Выключатель URL-фильтра") + @FindBy(id = "switcher") + private HtmlElement urlSwitcher; + + public HtmlElement getUrlSwitcher() { + return urlSwitcher; + } + + @Name("Кнопка включения URL-фильтра") + @FindBy(id = "button") + private HtmlElement urlFilterEnableBatton; + + public HtmlElement getUrlFilterEnableBatton() { + return urlFilterEnableBatton; + } + + @Name("Список команд в поп-апе: запретить доступ и разреить доступ") + @FindBy(id = "title") + private List urlPermissionList; + + public HtmlElement getRestrictAccess() { + return urlPermissionList.get(0); + } + + public HtmlElement getAllowAccess() { + return urlPermissionList.get(1); + } + +} 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 new file mode 100644 index 0000000..4d75376 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/pages/MainPage.java @@ -0,0 +1,30 @@ +package ru.qatools.school.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; +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.loader.decorator.HtmlElementDecorator; +import ru.yandex.qatools.htmlelements.loader.decorator.HtmlElementLocatorFactory; + +import java.util.List; + +/** + * Created by kurau. + */ +public class MainPage { + + public MainPage(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name("Список виджетов") + @FindBy(css = ".card.card_md") + private List weatherWidget; + + public List getWeatherWidget() { + return weatherWidget; + } + +} 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 new file mode 100644 index 0000000..3990d85 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/WeatherWidget.java @@ -0,0 +1,43 @@ +package ru.qatools.school.pages.blocks; + +import org.openqa.selenium.Rectangle; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +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.HtmlElement; + +/** + * Created by kurau. + */ +public class WeatherWidget extends HtmlElement { + + @Name("Заголовок виджета") + @FindBy(css = ".card-title") + private WidgetTitle widgetTitle; + + @Name("Текст виджета") + @FindBy(css = ".card-text") + private WidgetText widgetText; + + @Name("Панель управления виджетом") + @FindBy(css = ".card-actions") + private WebElement actions; + + public WidgetText getWidgetText() { + return widgetText; + } + + 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 new file mode 100644 index 0000000..510d070 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetText.java @@ -0,0 +1,25 @@ +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; + +/** + * Created by kurau. + */ +public class WidgetText extends HtmlElement { + + @Name("Картинка текущей погоды") + @FindBy(css = ".weather-image") + private WebElement weatherImage; + + public WebElement getWeatherImage() { + return weatherImage; + } + + public Rectangle getRect() { + return null; + } +} 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 new file mode 100644 index 0000000..8a88782 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/pages/blocks/widgetblocks/WidgetTitle.java @@ -0,0 +1,14 @@ +package ru.qatools.school.pages.blocks.widgetblocks; + +import org.openqa.selenium.Rectangle; +import ru.yandex.qatools.htmlelements.element.HtmlElement; + +/** + * Created by kurau. + */ +public class WidgetTitle extends HtmlElement { + + public Rectangle getRect() { + return null; + } +} 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..69698f6 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/rules/MobileDriverRule.java @@ -0,0 +1,34 @@ +package ru.qatools.school.rules; + +import org.junit.rules.ExternalResource; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.remote.RemoteWebDriver; + +import java.net.MalformedURLException; +import java.net.URL; + +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", "C:\\Users\\Chibert\\Downloads\\noLicense-general-debug.apk"); + //desiredCapabilities.setCapability("app", "http://autoschool.github.io/files/ya-metro.apk"); + //desiredCapabilities.setCapability("appWaitActivity", "ru.yandex.metro.MainActivity"); + driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); + } + + protected void after() { + driver.quit(); + } + + public WebDriver getDriver() { + return driver; + } + +} 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 new file mode 100644 index 0000000..418c363 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/rules/WebDriverRule.java @@ -0,0 +1,27 @@ +package ru.qatools.school.rules; + +import org.junit.rules.ExternalResource; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; + +/** + * Created by kurau. + */ +public class WebDriverRule extends ExternalResource { + + private WebDriver driver; + + protected void before() throws Throwable { + this.driver = new FirefoxDriver(); + } + + protected void after() { + driver.close(); + driver.quit(); + } + + public WebDriver 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..4384670 --- /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.WebDriver; +import org.openqa.selenium.support.FindBy; +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; + +/** + * Created by o.polyakov on 18.05.2016. + */ +public class MainScreen { + + public MainScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name(" - From") + @FindBy(id = "tv_from_name") + private HtmlElement fromStationField; + + public HtmlElement getFromStationField() { + return fromStationField; + } + + @Name(" - To") + @FindBy(id = "tv_to_name") + private HtmlElement toStationField; + + public HtmlElement getToStationField() { + return toStationField; + } + + @Name(" ") + @FindBy(id = "tv_time") + private HtmlElement timeField; + + public HtmlElement getTimeField() { + 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..97aec0a --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/screens/SelectStationScreen.java @@ -0,0 +1,38 @@ +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 o.polyakov on 18.05.2016. + */ +public class SelectStationScreen { + + public SelectStationScreen(WebDriver driver) { + PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this); + } + + @Name(" ") + @FindBy(id = "filterTextId") + private HtmlElement stationNameField; + + public HtmlElement getStationNameField() { + return stationNameField; + } + + @Name(" ") + @FindBy(id = "txtStationName") + private List stationsNameList; + + public List getStationsNameList() { + return stationsNameList; + } + +} \ No newline at end of file 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 index 043ad54..f22648c 100644 --- a/steps-module/src/main/java/ru/qatools/school/steps/UserSteps.java +++ b/steps-module/src/main/java/ru/qatools/school/steps/UserSteps.java @@ -2,11 +2,16 @@ 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() { @@ -15,9 +20,14 @@ 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/mobilesteps/DefaultSteps.java b/steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/DefaultSteps.java new file mode 100644 index 0000000..bf333e6 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/steps/mobilesteps/DefaultSteps.java @@ -0,0 +1,46 @@ +package ru.qatools.school.steps.mobilesteps; + +import org.openqa.selenium.WebDriver; +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.junit.Assert.assertThat; + +import static org.hamcrest.Matchers.greaterThan; + + +public class DefaultSteps { + + private WebDriver driver; + + public DefaultSteps(WebDriver driver) { + this.driver = driver; + } + + + @Step("Тап по элементу {0}") + public void clickOn(HtmlElement element) { + element.click(); + } + + @Step("Вводим в поле «{0}» текст «{1}»") + public void enterText(HtmlElement element, String text) { + element.sendKeys(text); + } + + @Step("Время в «{0}» должно быть больше, чем «{1}»") + public void shouldSeeTimeLongerThan(HtmlElement element, int minTime) { + + String timeText = element.getText(); + Pattern pattern = Pattern.compile("\\d+"); + Matcher matcher = pattern.matcher(timeText); + matcher.find(); + int timeMinut = Integer.parseInt(matcher.group()); + assertThat("Неправильное расчетное время поездки!", timeMinut, greaterThan(minTime)); + + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000..1425a42 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/steps/websteps/DefaultSteps.java @@ -0,0 +1,38 @@ +package ru.qatools.school.steps.websteps; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import ru.qatools.school.pages.MainPage; +import ru.yandex.qatools.allure.annotations.Step; + +import static java.lang.String.format; +import static org.junit.Assert.assertThat; +import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.isDisplayed; + +/** + * Created by kurau. + */ +public class DefaultSteps { + + public static final String MAIN_PAGE = "http://weather.lanwen.ru/#?cities=%s"; + + private WebDriver driver; + + public DefaultSteps(WebDriver driver) { + this.driver = driver; + } + + @Step("Открываем главную страницу для города «{0}»") + public void openMainPageWithCity(String city) { + driver.get(format(MAIN_PAGE, city)); + } + + @Step("Должны видеть на странице «{0}»") + public void shouldSee(WebElement element) { + assertThat("Должны видеть элемент", element, isDisplayed()); + } + + private MainPage onMainPage() { + return new MainPage(driver); + } +} diff --git a/steps-module/src/main/java/ru/qatools/school/tp/TPInformerRule.java b/steps-module/src/main/java/ru/qatools/school/tp/TPInformerRule.java new file mode 100644 index 0000000..62857d2 --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/tp/TPInformerRule.java @@ -0,0 +1,64 @@ +package ru.qatools.school.tp; + +import org.junit.AssumptionViolatedException; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; +import ru.qatools.school.tp.client.TPClient; +import ru.yandex.qatools.allure.annotations.TestCaseId; + +import static com.google.common.collect.Lists.newArrayList; +import static java.lang.System.currentTimeMillis; + +/** + * @author lanwen (Merkushev Kirill) + */ +public class TPInformerRule extends TestWatcher { + + private String project; + private long start; + + public TPInformerRule(String project) { + this.project = project; + } + + @Override + protected void starting(Description description) { + start = currentTimeMillis(); + updateWithStatus("STARTED", description); + } + + @Override + protected void skipped(AssumptionViolatedException e, Description description) { + updateWithStatus("SKIPPED", description); + } + + @Override + protected void failed(Throwable e, Description description) { + if (e instanceof AssertionError) { + updateWithStatus("FAILED", description); + } else { + updateWithStatus("BROKEN", description); + } + } + + @Override + protected void succeeded(Description description) { + updateWithStatus("PASSED", description); + } + + private void updateWithStatus(String status, Description description) { + if (description.getAnnotation(TestCaseId.class) != null) { + TPClient.callUpdate(project, + newArrayList( + new TPClient.TCaseStatus(new TPClient.TCase(idFrom(description)), + status, + currentTimeMillis() - start + ))); + } + } + + private String idFrom(Description description) { + return description.getAnnotation(TestCaseId.class).value(); + } + +} diff --git a/steps-module/src/main/java/ru/qatools/school/tp/client/TPClient.java b/steps-module/src/main/java/ru/qatools/school/tp/client/TPClient.java new file mode 100644 index 0000000..85016ff --- /dev/null +++ b/steps-module/src/main/java/ru/qatools/school/tp/client/TPClient.java @@ -0,0 +1,49 @@ +package ru.qatools.school.tp.client; + +import com.jayway.restassured.RestAssured; +import com.jayway.restassured.http.ContentType; + +import java.util.List; + +/** + * @author lanwen (Merkushev Kirill) + */ +public class TPClient { + + private static final String ENDPOINT = System.getProperty("tp.api.endpoint", "http://localhost/"); + private static final String TOKEN = System.getProperty("tp.api.token", "empty"); + private static final String RUN = System.getProperty("tp.api.run", "empty"); + + public static void callUpdate(String project, List statuses) { + RestAssured.given() + .relaxedHTTPSValidation() + .log().all() + .baseUri(ENDPOINT) + .basePath("/api/") + .header("TestPalm-Api-Token", TOKEN) + .contentType(ContentType.JSON) + .body(statuses) + .when().log().all().post("/testrun/{project}/{run}/bulk", project, RUN).peek(); + } + + public static class TCaseStatus { + private TCase testCase; + private String status; + private Long duration; + + public TCaseStatus(TCase testCase, String status, Long duration) { + this.testCase = testCase; + this.status = status; + this.duration = duration; + } + } + + public static class TCase { + private String id; + + public TCase(String id) { + this.id = id; + } + } + +}