diff --git a/Vasileva/.gitignore b/Vasileva/.gitignore
new file mode 100644
index 0000000..3bac491
--- /dev/null
+++ b/Vasileva/.gitignore
@@ -0,0 +1,156 @@
+
+# Created by https://www.gitignore.io/api/intellij,java,maven,gradle,eclipse,netbeans
+
+### Intellij ###
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+
+*.iml
+nb-configuration.xml
+
+## Directory-based project format:
+.idea/
+.target
+# if you remove the above rule, at least ignore the following:
+
+# User-specific stuff:
+# .idea/workspace.xml
+# .idea/tasks.xml
+# .idea/dictionaries
+# .idea/shelf
+
+# Sensitive or high-churn files:
+# .idea/dataSources.ids
+# .idea/dataSources.xml
+# .idea/sqlDataSources.xml
+# .idea/dynamic.xml
+# .idea/uiDesigner.xml
+
+# Gradle:
+# .idea/gradle.xml
+# .idea/libraries
+
+# Mongo Explorer plugin:
+# .idea/mongoSettings.xml
+
+## File-based project format:
+*.ipr
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+/out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+
+### Java ###
+*.class
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+
+### Maven ###
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+
+
+### Gradle ###
+.gradle
+build/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+# Cache of project
+.gradletasknamecache
+
+
+### Eclipse ###
+
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+
+# Eclipse Core
+.project
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# JDT-specific (Eclipse Java Development Tools)
+.classpath
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+
+### NetBeans ###
+nbproject/private/
+build/
+nbbuild/
+dist/
+nbdist/
+nbactions.xml
+.nb-gradle/
+
+*.log
+
+csv/
\ No newline at end of file
diff --git a/Vasileva/.gitkeep b/Vasileva/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/Vasileva/README.md b/Vasileva/README.md
new file mode 100644
index 0000000..635e81b
--- /dev/null
+++ b/Vasileva/README.md
@@ -0,0 +1,2 @@
+Selenium WebDriver example project
+
diff --git a/Vasileva/pom.xml b/Vasileva/pom.xml
new file mode 100644
index 0000000..756ca36
--- /dev/null
+++ b/Vasileva/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+ tis-2017
+ tis-2017
+ 1.0
+
+ UTF-8
+ 1.8
+ 1.8
+
+
+
+
+ org.seleniumhq.selenium
+ selenium-java
+ 3.6.0
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.1.0-RC1
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.4
+
+
+ true
+
+ true
+ lib/
+ ru.ulstu.tis.Main
+
+
+ lib/
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Vasileva/src/main/java/ru/ulstu/tis/Main.java b/Vasileva/src/main/java/ru/ulstu/tis/Main.java
new file mode 100644
index 0000000..aa6f1d2
--- /dev/null
+++ b/Vasileva/src/main/java/ru/ulstu/tis/Main.java
@@ -0,0 +1,8 @@
+package ru.ulstu.tis;
+
+public class Main {
+
+ public static void main(String[] args) {
+ System.out.println("666");
+ }
+}
diff --git a/Vasileva/src/main/resources/drivers/chromedriver b/Vasileva/src/main/resources/drivers/chromedriver
new file mode 100644
index 0000000..02ff671
Binary files /dev/null and b/Vasileva/src/main/resources/drivers/chromedriver differ
diff --git a/Vasileva/src/main/resources/drivers/chromedriver.exe b/Vasileva/src/main/resources/drivers/chromedriver.exe
new file mode 100644
index 0000000..28a4067
Binary files /dev/null and b/Vasileva/src/main/resources/drivers/chromedriver.exe differ
diff --git a/Vasileva/src/main/resources/drivers/geckodriver b/Vasileva/src/main/resources/drivers/geckodriver
new file mode 100644
index 0000000..ba1da8c
Binary files /dev/null and b/Vasileva/src/main/resources/drivers/geckodriver differ
diff --git a/Vasileva/src/main/resources/drivers/geckodriver.exe b/Vasileva/src/main/resources/drivers/geckodriver.exe
new file mode 100644
index 0000000..6208aa8
Binary files /dev/null and b/Vasileva/src/main/resources/drivers/geckodriver.exe differ
diff --git a/Vasileva/src/test/java/Cabinet.java b/Vasileva/src/test/java/Cabinet.java
new file mode 100644
index 0000000..532a9ca
--- /dev/null
+++ b/Vasileva/src/test/java/Cabinet.java
@@ -0,0 +1,83 @@
+import context.ChromeContext;
+import context.Context;
+import helpers.AutorizationHelper;
+import helpers.SearchResultsPageHelper;
+import org.junit.jupiter.api.*;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.support.PageFactory;
+import page.*;
+import java.text.ParseException;
+import java.util.Random;
+
+public class Cabinet{
+ private final static String APP_URL = "https://doctor73.ru/";
+ private static Context context;
+
+ @BeforeEach
+ public void setup() {
+ context = new ChromeContext();
+ context.start();
+ context.getDriver().manage().window().setSize(new Dimension(1600, 900));
+ }
+
+ @AfterEach
+ public void quit() {
+ context.close();
+ }
+
+ @Test
+ public void autorization() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ AutorizationHelper helper = new AutorizationHelper();
+ helper.autorization(context);
+
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ Assertions.assertTrue(mainPage.isUserPresent() );
+ }
+
+ @Test
+ public void autorizationExit() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ AutorizationHelper helper = new AutorizationHelper();
+
+ helper.autorization(context);
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.exitButtonClick();
+
+ Assertions.assertTrue(mainPage.isBlockPresent() );
+ }
+
+ @Test
+ public void getUserDataFromGosuslugiTest() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ AutorizationHelper helper = new AutorizationHelper();
+ helper.autorization(context);
+
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.cabinetButtonClick();
+ CabinetPage cabinetPage = PageFactory.initElements(context.getDriver(), CabinetPage.class);
+ cabinetPage.getDataClick();
+ if(cabinetPage.isUserPresent()){
+ cabinetPage.addNewCard();
+ cabinetPage.deleteUserCard();
+ }
+
+ Assertions.assertTrue(cabinetPage.isUserPresent());
+ }
+
+ @Test
+ public void addCard() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ AutorizationHelper helper = new AutorizationHelper();
+ helper.autorization(context);
+
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.cabinetButtonClick();
+ CabinetPage cabinetPage = PageFactory.initElements(context.getDriver(), CabinetPage.class);
+ cabinetPage.getDataClick();
+ cabinetPage.addNewCard();
+ cabinetPage.deleteUserCard();
+
+ Assertions.assertTrue(cabinetPage.isCardPresent());
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/Documents.java b/Vasileva/src/test/java/Documents.java
new file mode 100644
index 0000000..f64fd41
--- /dev/null
+++ b/Vasileva/src/test/java/Documents.java
@@ -0,0 +1,56 @@
+import context.ChromeContext;
+import context.Context;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.support.PageFactory;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import page.LegislationPage;
+import page.MainPageDoctor;
+import java.io.File;
+
+public class Documents {
+ private final static String APP_URL = "https://doctor73.ru/";
+ private static Context context;
+ private static String tmpPath;
+
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ context.getDriver().manage().window().setSize(new Dimension(1600, 900));
+ context.getDriver().get(APP_URL);
+ tmpPath = context.getTmpPath();
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+
+ @Test
+ public void downloadDocs() throws InterruptedException {
+ MainPageDoctor page = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ page.clickLegislationPage();
+ LegislationPage legislationPage = PageFactory.initElements(context.getDriver(), LegislationPage.class);
+ legislationPage.clickDownloadDocLink();
+ String fileName = legislationPage.getFileName();
+ legislationPage.clickDownload();
+ checkDownload(fileName,100,500);
+ }
+
+ private void checkDownload(String fileName,int timeout, int period) throws InterruptedException {
+ File f = new File(tmpPath +fileName);
+ int time=0;
+ while(!f.exists()&&time tabs = new ArrayList (context.getDriver().getWindowHandles());
+ context.getDriver().switchTo().window(tabs.get(0));
+
+ Assertions.assertTrue(context.getDriver().getTitle().contains(title));
+ }
+
+ @Test
+ public void newsViewTest() {
+ context.getDriver().get(APP_URL);
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ String newsTitle = mainPage.getNewsText();
+ mainPage.clickNews();
+ NewsViewPage newsViewPage = PageFactory.initElements(context.getDriver(), NewsViewPage.class);
+ Assertions.assertTrue(newsViewPage.getTitle().contains(newsTitle));
+ }
+
+ @Test
+ public void doctorSpecialistView() {
+ context.getDriver().get(APP_URL);
+ AutorizationHelper helper = new AutorizationHelper();
+ helper.autorization(context);
+
+ MainPageDoctor page = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ page.clickTopMenuElement();
+ DoctorsPage doctorsPage = PageFactory.initElements(context.getDriver(), DoctorsPage.class);
+ String title = doctorsPage.getText();
+ doctorsPage.terapevtsClick();
+ SpecialistsViewPage specialistsViewPage = PageFactory.initElements(context.getDriver(), SpecialistsViewPage.class);
+
+ Assertions.assertTrue(specialistsViewPage.getTitle().contains(title));
+ }
+
+ @Test
+ public void scroll() {
+ context.getDriver().get(APP_URL);
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.scroll();
+ Assertions.assertTrue(mainPage.isButtonUpPresent());
+ }
+
+ @Test
+ public void vacancyDescriptionView() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.clickAboutPage();
+ AboutPage aboutPage = PageFactory.initElements(context.getDriver(), AboutPage.class);
+ aboutPage.vacancyClick();
+ aboutPage.dropdownClick();
+
+ Assertions.assertTrue(aboutPage.isDescriptionPresent());
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/Search.java b/Vasileva/src/test/java/Search.java
new file mode 100644
index 0000000..e41f4a6
--- /dev/null
+++ b/Vasileva/src/test/java/Search.java
@@ -0,0 +1,73 @@
+import context.ChromeContext;
+import context.Context;
+import helpers.SearchResultsPageHelper;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.support.PageFactory;
+import page.*;
+import java.text.ParseException;
+
+public class Search{
+ private final static String APP_URL = "https://doctor73.ru/";
+ private static Context context;
+
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ context.getDriver().manage().window().setSize(new Dimension(1600, 900));
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+
+ @Test
+ public void search() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ String searchString = "терапевт";
+
+ MainPageDoctor page = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ page.setSearchString(searchString);
+ page.clickSubmitButton();
+ SearchResultsPage searchResultsPage = PageFactory.initElements(context.getDriver(), SearchResultsPage.class);
+ SearchResultsPageHelper helper = new SearchResultsPageHelper(searchResultsPage);
+
+ Assertions.assertTrue(helper.searchResultsMatchQuery(searchString));
+ }
+
+ @Test
+ public void searchHospitalByPlace() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ MainPageDoctor page = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ page.clickHospitalsPage();
+
+ HospitalsPage hospitalsPage = PageFactory.initElements(context.getDriver(), HospitalsPage.class);
+ String street = "Филатова";
+ hospitalsPage.searchByAddressButtonClick();
+ hospitalsPage.insertStreet(street);
+ hospitalsPage.chooseHouse();
+
+ Assertions.assertTrue(hospitalsPage.isHospitalPresent());
+ }
+
+ @Test
+ public void searchHospitalByName() throws NoSuchMethodException, ParseException {
+ context.getDriver().get(APP_URL);
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.clickHospitalsPage();
+
+ String searchString = "Кирова";
+ HospitalsPage page = PageFactory.initElements(context.getDriver(), HospitalsPage.class);
+ page.setSearchString(searchString);
+ String title = page.chooseHospital();
+ page.searchHospitalClick();
+ SearchHospitalByNameResultPage searchResultsPage = PageFactory.initElements(context.getDriver(), SearchHospitalByNameResultPage.class);
+
+ Assertions.assertTrue(searchResultsPage.getTitle().contains(title));
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/context/ChromeContext.java b/Vasileva/src/test/java/context/ChromeContext.java
new file mode 100644
index 0000000..6532b7b
--- /dev/null
+++ b/Vasileva/src/test/java/context/ChromeContext.java
@@ -0,0 +1,35 @@
+package context;
+
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ChromeContext extends Context {
+ private final static String WINDOWS_DRIVER = "chromedriver.exe";
+ private final static String LINUX_DRIVER = "chromedriver";
+ private final static String DRIVER_TYPE = "webdriver.chrome.driver";
+
+ @Override
+ protected void createDriver() {
+ ChromeOptions options = new ChromeOptions();
+ Map prefs = new HashMap();
+
+ tmpPath = System.getProperty("user.dir") + "/src/main/resources/downloads/";
+
+ prefs.put("download.default_directory", tmpPath);
+
+ driver = new ChromeDriver();
+ }
+
+ @Override
+ protected String getDriverExecutable(boolean isWindows) {
+ return isWindows ? WINDOWS_DRIVER : LINUX_DRIVER;
+ }
+
+ @Override
+ protected String getDriverType() {
+ return DRIVER_TYPE;
+ }
+}
diff --git a/Vasileva/src/test/java/context/Context.java b/Vasileva/src/test/java/context/Context.java
new file mode 100644
index 0000000..67f7b6f
--- /dev/null
+++ b/Vasileva/src/test/java/context/Context.java
@@ -0,0 +1,52 @@
+package context;
+
+import org.openqa.selenium.WebDriver;
+
+import java.util.concurrent.TimeUnit;
+
+public abstract class Context {
+ private final static String DRIVER_LOCATION = "drivers/%s";
+ protected WebDriver driver;
+
+
+ protected String tmpPath;
+
+
+ public WebDriver getDriver() {
+ if (driver != null) {
+ return driver;
+ }
+ throw new IllegalStateException("WebDriver is not initialized");
+ }
+
+ public void start() {
+ System.setProperty(getDriverType(), getDriverExecutablePath());
+ createDriver();
+ // это плохая инструкция для автотестов, т.к. лучше задавать для конкретного элемента или кейса
+ driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
+ }
+
+ public void close() {
+ driver.quit();
+ }
+
+ protected abstract void createDriver();
+
+ protected abstract String getDriverType();
+
+ protected abstract String getDriverExecutable(boolean windows);
+
+ private String getDriverExecutablePath() {
+ return Context.class.getClassLoader().getResource(
+ String.format(DRIVER_LOCATION, getDriverExecutable(isWindows()))).getFile();
+ }
+
+ private boolean isWindows() {
+ return System.getProperty("os.name").toLowerCase().contains("windows");
+ }
+
+ public String getTmpPath(){
+ return tmpPath;
+ }
+
+}
diff --git a/Vasileva/src/test/java/context/FirefoxContext.java b/Vasileva/src/test/java/context/FirefoxContext.java
new file mode 100644
index 0000000..1d5c163
--- /dev/null
+++ b/Vasileva/src/test/java/context/FirefoxContext.java
@@ -0,0 +1,24 @@
+package context;
+
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+public class FirefoxContext extends Context {
+ private final static String WINDOWS_DRIVER = "geckodriver.exe";
+ private final static String LINUX_DRIVER = "geckodriver";
+ private final static String DRIVER_TYPE = "webdriver.gecko.driver";
+
+ @Override
+ protected void createDriver() {
+ driver = new FirefoxDriver();
+ }
+
+ @Override
+ protected String getDriverExecutable(boolean isWindows) {
+ return isWindows ? WINDOWS_DRIVER : LINUX_DRIVER;
+ }
+
+ @Override
+ protected String getDriverType() {
+ return DRIVER_TYPE;
+ }
+}
diff --git a/Vasileva/src/test/java/helpers/AutorizationHelper.java b/Vasileva/src/test/java/helpers/AutorizationHelper.java
new file mode 100644
index 0000000..77a84cd
--- /dev/null
+++ b/Vasileva/src/test/java/helpers/AutorizationHelper.java
@@ -0,0 +1,30 @@
+package helpers;
+
+import context.Context;
+import org.junit.jupiter.api.Assertions;
+import org.openqa.selenium.support.PageFactory;
+import page.MainPageDoctor;
+import page.MainPageGosuslugi;
+
+import java.text.ParseException;
+
+public class AutorizationHelper {
+ public void autorization(Context context) {
+
+ MainPageDoctor mainPage = PageFactory.initElements(context.getDriver(), MainPageDoctor.class);
+ mainPage.clickAutorization();
+
+ MainPageGosuslugi mainPageGosuslugi = PageFactory.initElements(context.getDriver(), MainPageGosuslugi.class);
+ String login = "nadya97vas@yandex.ru";
+ String password = "H16lprokX+";
+ try {
+ Thread.sleep(9000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ mainPageGosuslugi.insertLogin(login);
+ mainPageGosuslugi.insertPassword(password);
+ mainPageGosuslugi.submitButtonClick();
+ }
+
+}
diff --git a/Vasileva/src/test/java/helpers/SearchResultsPageHelper.java b/Vasileva/src/test/java/helpers/SearchResultsPageHelper.java
new file mode 100644
index 0000000..b1f3f8e
--- /dev/null
+++ b/Vasileva/src/test/java/helpers/SearchResultsPageHelper.java
@@ -0,0 +1,40 @@
+package helpers;
+
+import page.SearchResultsPage;
+
+import java.lang.reflect.Method;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+public class SearchResultsPageHelper {
+
+ private SearchResultsPage page;
+ public SearchResultsPageHelper(SearchResultsPage page){
+ this.page = page;
+ }
+
+ public boolean searchResultsMatchQuery(String queryString) throws ParseException, NoSuchMethodException {
+ boolean matched = true;
+
+ for (int i = 0; i < page.getItemsCount(); i++) {
+ if(!waitAngGetItemsText(i).toLowerCase().contains(queryString)){
+ matched = false;
+ break;
+ }
+ }
+ return matched;
+
+ }
+
+ public String waitAngGetItemsText(int itemNumber) throws NoSuchMethodException {
+
+ Method method = SearchResultsPage.class.getMethod("getItemsText", int.class);
+ return (String)WaitingForElementToLoadHelper.waitAndCallMethod(method,page,new Object[]{itemNumber});
+
+ }
+}
+
diff --git a/Vasileva/src/test/java/helpers/WaitingForElementToLoadHelper.java b/Vasileva/src/test/java/helpers/WaitingForElementToLoadHelper.java
new file mode 100644
index 0000000..0c6c9fa
--- /dev/null
+++ b/Vasileva/src/test/java/helpers/WaitingForElementToLoadHelper.java
@@ -0,0 +1,27 @@
+package helpers;
+
+import java.lang.reflect.Method;
+
+public class WaitingForElementToLoadHelper {
+ static int tryLimit=10;
+ static Object waitAndCallMethod(Method methodToCall,Object object,Object[] parameters ){
+
+ Object objectToReturn=null;
+ boolean breakIt=false;
+ int attemptNumber =0;
+ while (!breakIt&&attemptNumber streetChoice;
+
+ @FindBy(xpath = "//*[@id=\"house_search-button\"]")
+ private WebElement houseButton;
+
+ @FindBy(xpath = "//*[@id=\"house_search-menu\"]")
+ private List houseNumber;
+
+ @FindBy(xpath = "//*[@id=\"foundlpu\"]/tbody")
+ private WebElement element;
+
+ @FindBy(xpath = "//*[@id=\"lpu_search\"]")
+ private WebElement inputHospitalField;
+
+ @FindBy(css = ".ui-menu-item")
+ private List hospitalsList;
+
+ @FindBy(xpath = "//*[@id=\"search_go\"]")
+ private WebElement searchHospitalButton;
+
+ @FindBy(xpath = "//*[@id=\"MainContent\"]/div[1]/div[2]/span/a")
+ private WebElement hospitalViewButton;
+
+ @FindBy(css = ".l-vis")
+ private List filteredHospitalsList;
+
+ public HospitalsPage(WebDriver driver) {
+ wait = new WebDriverWait(driver,30,500);
+ this.driver = driver;
+ }
+
+ public String getTitle(){
+ return driver.getTitle();
+ }
+
+ public void searchByAddressButtonClick(){
+ searchByAddressButton.click();
+ }
+
+ public void insertStreet(String str) {
+ street.sendKeys(str);
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"ui-id-8\"]")));
+ streetChoice.get(0).click();
+ }
+ public void chooseHouse() {
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"house_search-button\"]")));
+ houseButton.click();
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"house_search-menu\"]")));
+ houseNumber.get(0).click();
+ }
+ public boolean isHospitalPresent() {
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"foundlpu\"]/tbody")));
+ return element.isDisplayed();
+ }
+
+ public HospitalsPage setSearchString(String text) {
+ inputHospitalField.sendKeys(text);
+ return this;
+ }
+ public String chooseHospital() {
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".ui-menu-item")));
+ hospitalsList.get(0).click();
+
+ return hospitalsList.get(0).getText();
+ }
+
+ public void searchHospitalClick(){
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"search_go\"]")));
+ searchHospitalButton.click();
+ }
+
+ public void hospitalViewButtonClick(){
+ hospitalViewButton.click();
+ }
+
+ public int getHospitalViewCount(){
+ String str = hospitalViewButton.getText();
+ String substr = str.substring(17,18);
+ return Integer.parseInt(substr);
+ }
+ public boolean checkHospitalsFilter(){
+ if(filteredHospitalsList.size()==getHospitalViewCount()) return true;
+ else return false;
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/LegislationPage.java b/Vasileva/src/test/java/page/LegislationPage.java
new file mode 100644
index 0000000..df61154
--- /dev/null
+++ b/Vasileva/src/test/java/page/LegislationPage.java
@@ -0,0 +1,33 @@
+package page;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+public class LegislationPage {
+ WebDriver driver;
+
+ @FindBy(xpath = "//*[@id=\"MainContent\"]/table[8]/tbody/tr[2]/td/ul/li")
+ private WebElement downloadLink;
+
+ @FindBy(xpath = "//*[@id=\"4e4a4b91-915e-4759-ad51-5daa9292f5aa\"]/div/div/table/tbody/tr[1]/td[3]/a")
+ private WebElement downloadDoc;
+
+ public LegislationPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public String getFileName(){
+ String fileName = downloadDoc.getAttribute("href");
+ fileName = fileName.substring(fileName.lastIndexOf("/")+1);
+ return fileName;
+ }
+
+ public void clickDownloadDocLink() {
+ downloadLink.click();
+ }
+
+ public void clickDownload() {
+ downloadDoc.click();
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/MainPageDoctor.java b/Vasileva/src/test/java/page/MainPageDoctor.java
new file mode 100644
index 0000000..2bf928e
--- /dev/null
+++ b/Vasileva/src/test/java/page/MainPageDoctor.java
@@ -0,0 +1,148 @@
+package page;
+
+import org.openqa.selenium.*;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.util.List;
+
+public class MainPageDoctor {
+ WebDriver driver;
+ private WebDriverWait wait;
+
+ @FindBy(xpath = "//*[@id=\"HorizontalMenu\"]/ul/li[4]")
+ private WebElement topMenuElement;
+
+ @FindBy(xpath = "//*[@id=\"VerticalMenu\"]/ul/li[2]")
+ private WebElement sideMenuElement;
+
+ @FindBy(xpath = "//*[@id=\"VerticalMenu\"]/ul/li[9]")
+ private WebElement rulesPage;
+
+ @FindBy(xpath = "//*[@id=\"HorizontalMenu\"]/ul/li[5]")
+ private WebElement legislationPage;
+
+ @FindBy(xpath = "//*[@id=\"issearch\"]")
+ private WebElement inputField;
+
+ @FindBy(xpath = "//*[@id=\"articles\"]/div[1]/div[1]")
+ private WebElement news;
+
+ @FindBy(xpath = "//*[@id=\"articles\"]/div[1]/div[2]/div/a")
+ private WebElement newsButton;
+
+ @FindBy(xpath = "//*[@id=\"HorizontalMenu\"]/ul/li[3]/a")
+ private WebElement hospitalsPage;
+
+ @FindBy(xpath = "//*[@id=\"Footer\"]")
+ private WebElement footer;
+
+ @FindBy(xpath = "//*[@id=\"BackToTop\"]")
+ private WebElement buttonUp;
+
+ @FindBy(xpath = "//*[@id=\"VerticalMenu\"]/ul/li[7]/a")
+ private WebElement questionsAndAnswersPage;
+
+ @FindBy(xpath = "//*[@id=\"AuthButtons\"]/button/span")
+ private WebElement autorizationButton;
+
+ @FindBy(xpath = "//*[@id=\"HorizontalMenu\"]/ul/li[2]/a")
+ private WebElement aboutPage;
+
+ @FindBy(xpath = "//*[@id=\"AuthOK\"]/span[2]/a[2]")
+ private WebElement exitButton;
+
+ @FindBy(xpath = "//*[@id=\"AuthEsia\"]")
+ private WebElement authEsia;
+
+ @FindBy(xpath = "//*[@id=\"AuthOK\"]/span[2]/a[1]")
+ private WebElement cabinetButton;
+
+ public MainPageDoctor(WebDriver driver) {
+ wait = new WebDriverWait(driver,30,500);
+ this.driver = driver;
+ }
+
+ public String getTopMenuElementText(){
+ return topMenuElement.getText();
+ }
+
+ public void clickTopMenuElement() {
+ topMenuElement.click();
+ }
+
+ public String getSideMenuElementText(){
+ return sideMenuElement.getText();
+ }
+
+ public void clickSideMenuElement() {
+ sideMenuElement.click();
+ }
+
+ public void clickLegislationPage(){
+ legislationPage.click();
+ }
+
+ public void clickAboutPage(){
+ aboutPage.click();
+ }
+
+ public void clickRulesPage(){
+ rulesPage.click();
+ }
+
+ public void clickQuestionsAndAnswersPage(){
+ questionsAndAnswersPage.click();
+ }
+
+ public void clickAutorization(){
+ autorizationButton.click();
+ }
+
+ public MainPageDoctor setSearchString(String text) {
+ inputField.sendKeys(text);
+ return this;
+ }
+ public void clickSubmitButton() {
+ inputField.sendKeys(Keys.RETURN);
+ }
+
+ public String getNewsText(){
+ return news.getText();
+ }
+
+ public void clickNews(){
+ newsButton.click();
+ }
+
+ public void clickHospitalsPage(){
+ hospitalsPage.click();
+ }
+
+ public void scroll(){
+ ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();"
+ ,footer);
+ }
+
+ public boolean isButtonUpPresent() {
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"BackToTop\"]")));
+ return driver.findElement(By.xpath("//*[@id=\"BackToTop\"]")).isDisplayed();
+ }
+
+ public boolean isUserPresent() {
+ return driver.findElement(By.id("lfio")).isDisplayed();
+ }
+
+ public void exitButtonClick(){
+ exitButton.click();
+ }
+
+ public boolean isBlockPresent() {
+ return authEsia.isDisplayed();
+ }
+
+ public void cabinetButtonClick(){
+ cabinetButton.click();
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/MainPageGosuslugi.java b/Vasileva/src/test/java/page/MainPageGosuslugi.java
new file mode 100644
index 0000000..595df7c
--- /dev/null
+++ b/Vasileva/src/test/java/page/MainPageGosuslugi.java
@@ -0,0 +1,40 @@
+package page;
+
+import org.openqa.selenium.JavascriptExecutor;
+ import org.openqa.selenium.WebDriver;
+ import org.openqa.selenium.WebElement;
+ import org.openqa.selenium.support.FindBy;
+ import org.openqa.selenium.support.ui.ExpectedConditions;
+ import org.openqa.selenium.support.ui.WebDriverWait;
+
+ import java.util.List;
+ import java.lang.reflect.Method;
+
+public class MainPageGosuslugi {
+ private WebDriver driver;
+
+ @FindBy(xpath = "//*[@id=\"mobileOrEmail\"]")
+ private WebElement loginInputField;
+
+ @FindBy(xpath = "//*[@id=\"password\"]")
+ private WebElement passwordInputField;
+
+ @FindBy(xpath = "//*[@id=\"authnFrm\"]/div[1]/div[3]/div[3]/div[2]/button")
+ private WebElement submitButton;
+
+ public MainPageGosuslugi(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public void insertLogin(String str) {
+ loginInputField.sendKeys(str);
+ }
+
+ public void insertPassword(String str) {
+ passwordInputField.sendKeys(str);
+ }
+
+ public void submitButtonClick(){
+ submitButton.click();
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/NewsPage.java b/Vasileva/src/test/java/page/NewsPage.java
new file mode 100644
index 0000000..9fcd216
--- /dev/null
+++ b/Vasileva/src/test/java/page/NewsPage.java
@@ -0,0 +1,20 @@
+package page;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+public class NewsPage {
+ private WebDriver driver;
+
+ @FindBy(xpath = "//*[@id=\"MainContent\"]")
+ private WebElement element;
+
+ public NewsPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public String getTitle(){
+ return driver.getTitle();
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/NewsViewPage.java b/Vasileva/src/test/java/page/NewsViewPage.java
new file mode 100644
index 0000000..afdc076
--- /dev/null
+++ b/Vasileva/src/test/java/page/NewsViewPage.java
@@ -0,0 +1,24 @@
+package page;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.util.List;
+
+public class NewsViewPage {
+ private WebDriver driver;
+
+ @FindBy(xpath = "//*[@id=\"MainContent\"]/div[1]")
+ private WebElement element;
+
+ public NewsViewPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public String getTitle(){
+ return driver.getTitle();
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/QuestionsAndAnswersPage.java b/Vasileva/src/test/java/page/QuestionsAndAnswersPage.java
new file mode 100644
index 0000000..3a0fb95
--- /dev/null
+++ b/Vasileva/src/test/java/page/QuestionsAndAnswersPage.java
@@ -0,0 +1,78 @@
+package page;
+
+import org.openqa.selenium.By;
+ import org.openqa.selenium.JavascriptExecutor;
+ import org.openqa.selenium.WebDriver;
+ import org.openqa.selenium.WebElement;
+ import org.openqa.selenium.support.FindBy;
+ import org.openqa.selenium.support.ui.ExpectedConditions;
+ import org.openqa.selenium.support.ui.WebDriverWait;
+
+ import java.util.List;
+ import java.lang.reflect.Method;
+
+public class QuestionsAndAnswersPage {
+ private WebDriver driver;
+
+ @FindBy(xpath = "//*[@id=\"MainContent\"]/div[1]/div/span[3]/a")
+ private WebElement filterByRatingButton;
+
+ @FindBy(css = ".rating-num-plus")
+ private List ratingPlusList;
+
+ @FindBy(css = ".rating-num-minus")
+ private List ratingMinusList;
+
+ @FindBy(xpath = "//*[@id=\"NewQuestion\"]")
+ private WebElement inputTextField;
+
+ @FindBy(xpath = "//*[@id=\"AddQuestionButton\"]")
+ private WebElement submitButton;
+
+ @FindBy(css = ".panel-text")
+ private List questionsList;
+
+ public QuestionsAndAnswersPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public void filterByRatingClick(){
+ filterByRatingButton.click();
+ }
+
+ public boolean checkRatingOrder() {
+ try {
+ Thread.sleep(2000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ boolean checkRatingOrder = true;
+ int pastRating = Integer.parseInt(ratingPlusList.get(0).getText())+Integer.parseInt(ratingMinusList.get(0).getText());
+ for (int i=1; i= currentRating){checkRatingOrder = true; pastRating=currentRating; }
+ else {checkRatingOrder = false; break;}
+
+ }
+ return checkRatingOrder;
+ }
+
+ public boolean isQuestionPresent(String str){
+ boolean check = false;
+ for (int i=0; i searchResultsTexts;
+
+ public SearchResultsPage (WebDriver driver) {
+ this.driver = driver;
+ wait = new WebDriverWait(driver,30,500);
+ }
+
+ public String getItemsText(int itemNumber){
+ return searchResultsTexts.get(itemNumber).getText();
+ }
+
+ public int getItemsCount() {
+ int size = searchResultsTexts.size();
+ return size;
+ }
+}
\ No newline at end of file
diff --git a/Vasileva/src/test/java/page/SpecialistsViewPage.java b/Vasileva/src/test/java/page/SpecialistsViewPage.java
new file mode 100644
index 0000000..98db44f
--- /dev/null
+++ b/Vasileva/src/test/java/page/SpecialistsViewPage.java
@@ -0,0 +1,22 @@
+package page;
+
+import org.openqa.selenium.WebDriver;
+ import org.openqa.selenium.WebElement;
+ import org.openqa.selenium.support.FindBy;
+ import org.openqa.selenium.support.ui.ExpectedConditions;
+ import org.openqa.selenium.support.ui.WebDriverWait;
+
+ import java.util.List;
+ import static java.lang.System.out;
+
+public class SpecialistsViewPage {
+ private WebDriver driver;
+
+ public SpecialistsViewPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public String getTitle(){
+ return driver.getTitle();
+ }
+}
\ No newline at end of file