diff --git a/kurnaev/.gitignore b/kurnaev/.gitignore
new file mode 100644
index 0000000..3bac491
--- /dev/null
+++ b/kurnaev/.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/kurnaev/README.md b/kurnaev/README.md
new file mode 100644
index 0000000..635e81b
--- /dev/null
+++ b/kurnaev/README.md
@@ -0,0 +1,2 @@
+Selenium WebDriver example project
+
diff --git a/kurnaev/pom.xml b/kurnaev/pom.xml
new file mode 100644
index 0000000..756ca36
--- /dev/null
+++ b/kurnaev/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/kurnaev/src/main/resources/drivers/chromedriver b/kurnaev/src/main/resources/drivers/chromedriver
new file mode 100644
index 0000000..02ff671
Binary files /dev/null and b/kurnaev/src/main/resources/drivers/chromedriver differ
diff --git a/kurnaev/src/main/resources/drivers/chromedriver.exe b/kurnaev/src/main/resources/drivers/chromedriver.exe
new file mode 100644
index 0000000..28a4067
Binary files /dev/null and b/kurnaev/src/main/resources/drivers/chromedriver.exe differ
diff --git a/kurnaev/src/main/resources/drivers/geckodriver b/kurnaev/src/main/resources/drivers/geckodriver
new file mode 100644
index 0000000..ba1da8c
Binary files /dev/null and b/kurnaev/src/main/resources/drivers/geckodriver differ
diff --git a/kurnaev/src/main/resources/drivers/geckodriver.exe b/kurnaev/src/main/resources/drivers/geckodriver.exe
new file mode 100644
index 0000000..6208aa8
Binary files /dev/null and b/kurnaev/src/main/resources/drivers/geckodriver.exe differ
diff --git a/kurnaev/src/test/java/AccountTests.java b/kurnaev/src/test/java/AccountTests.java
new file mode 100644
index 0000000..58a8f30
--- /dev/null
+++ b/kurnaev/src/test/java/AccountTests.java
@@ -0,0 +1,212 @@
+import org.openqa.selenium.support.PageFactory;
+
+import java.util.concurrent.TimeUnit;
+
+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 context.ChromeContext;
+import context.Context;
+import page.MainPage;
+import page.GamePage;
+
+public class AccountTests
+{
+
+ private final static String APP_URL = "http://gmt-max.net/";
+ private static Context context;
+
+ @Test
+ public void logIn()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ if(MainPage.isLoggedIn())
+ {
+ page.clickLogOutButton();
+ context.wait(5);
+ }
+ page.clickLoginButton();
+ context.wait(5);
+ page.enterTextToLoginField("g35hfsd");
+ page.enterTextToPasswordField("hfgn53fgb");
+ context.wait(3);
+ page.clickloginConfirmButton();
+ context.wait(5);
+
+ Assertions.assertTrue(MainPage.isLoggedIn());
+
+
+ }
+
+ @Test
+ public void logOut()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ if(!MainPage.isLoggedIn())
+ {
+ page.clickLoginButton();
+ context.wait(5);
+ page.enterTextToLoginField("g35hfsd");
+ page.enterTextToPasswordField("hfgn53fgb");
+ context.wait(3);
+ page.clickloginConfirmButton();
+ context.wait(5);
+ }
+ page.clickLogOutButton();
+ context.wait(5);
+
+ Assertions.assertTrue(MainPage.isLoggedOut());
+
+
+ }
+
+ @Test
+ public void registration()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ if(MainPage.isLoggedIn())
+ {
+ page.clickLogOutButton();
+ context.wait(5);
+ }
+ page.clickRegistrationButton();
+ context.wait(5);
+
+ Assertions.assertTrue(MainPage.isRegistrationPagePresent());
+
+
+ }
+
+ @Test
+ public void logInWithOnlyPassword()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ if(MainPage.isLoggedIn())
+ {
+ page.clickLogOutButton();
+ context.wait(5);
+ }
+ page.clickLoginButton();
+ context.wait(5);
+ page.enterTextToPasswordField("hfgn53fgb");
+ context.wait(3);
+ page.clickloginConfirmButton();
+ context.wait(5);
+
+ Assertions.assertTrue(MainPage.isNotLoggedIn());
+
+
+ }
+
+ @Test
+ public void logInWithOnlyName()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ if(MainPage.isLoggedIn())
+ {
+ page.clickLogOutButton();
+ context.wait(5);
+ }
+ page.clickLoginButton();
+ context.wait(5);
+ page.enterTextToLoginField("g35hfsd");
+ context.wait(3);
+ page.clickloginConfirmButton();
+ context.wait(5);
+
+ Assertions.assertTrue(MainPage.isNotLoggedIn());
+
+
+ }
+
+ @Test
+ public void logInWithLongNameAndCorrectPassword()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ if(MainPage.isLoggedIn())
+ {
+ page.clickLogOutButton();
+ context.wait(5);
+ }
+ page.clickLoginButton();
+ context.wait(5);
+ page.enterTextToLoginField("g35hfsdg54ytgh657435635gdhhhhe546yghf");
+ page.enterTextToPasswordField("hfgn53fgb");
+ context.wait(3);
+ page.clickloginConfirmButton();
+ context.wait(5);
+
+ Assertions.assertTrue(MainPage.isNotLoggedIn());
+
+
+ }
+ @Test
+ public void addToFavorites()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ GamePage page1 = PageFactory.initElements(context.getDriver(), GamePage.class);
+ context.wait(10);
+ if(!MainPage.isLoggedIn())
+ {
+ page.clickLoginButton();
+ context.wait(5);
+ page.enterTextToLoginField("g35hfsd");
+ page.enterTextToPasswordField("hfgn53fgb");
+ context.wait(3);
+ page.clickloginConfirmButton();
+ context.wait(5);
+ }
+ page.clickPreviewLink();
+ context.wait(5);
+ if(GamePage.isAddedToFavorites())
+ {
+ page1.clickAddToFavoritesGameButton();
+ context.wait(3);
+ }
+ page1.clickAddToFavoritesGameButton();
+ context.wait(5);
+ Assertions.assertTrue(GamePage.isAddedToFavorites());
+
+
+ }
+
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ //context.getDriver().manage().window().setSize(new Dimension(1366, 768));
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+}
diff --git a/kurnaev/src/test/java/DownloadTests.java b/kurnaev/src/test/java/DownloadTests.java
new file mode 100644
index 0000000..55b9275
--- /dev/null
+++ b/kurnaev/src/test/java/DownloadTests.java
@@ -0,0 +1,53 @@
+import org.openqa.selenium.support.PageFactory;
+
+import java.util.concurrent.TimeUnit;
+
+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 context.ChromeContext;
+import context.Context;
+import page.MainPage;
+import page.GamePage;
+
+public class DownloadTests
+{
+
+ private final static String APP_URL = "http://gmt-max.net/";
+ private static Context context;
+
+ @Test
+ public void downloadTorrent()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ GamePage page1 = PageFactory.initElements(context.getDriver(), GamePage.class);
+ context.wait(10);
+ page.clickPreviewLink();
+ context.wait(5);
+ page1.clickDownloadLink();
+ context.switchTab(1);
+ context.wait(10);
+ page1.clickDownloadTorrentLink();
+ context.wait(15);
+ Assertions.assertTrue(GamePage.isDownloadPagePresent());
+ context.switchTab(0);
+
+
+ }
+
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ //context.getDriver().manage().window().setSize(new Dimension(1366, 768));
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+}
diff --git a/kurnaev/src/test/java/FilterTests.java b/kurnaev/src/test/java/FilterTests.java
new file mode 100644
index 0000000..2ce8494
--- /dev/null
+++ b/kurnaev/src/test/java/FilterTests.java
@@ -0,0 +1,119 @@
+import org.openqa.selenium.support.PageFactory;
+
+import java.util.concurrent.TimeUnit;
+
+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 context.ChromeContext;
+import context.Context;
+import page.AllGiveupsPage;
+import page.MainPage;
+import page.GamePage;
+import page.SearchPage;
+
+
+public class FilterTests
+{
+ private final static String APP_URL = "http://gmt-max.net/";
+ private static Context context;
+
+ @Test
+ public void searchWordOnSite()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+
+ context.wait(10);
+ page.search("Skyrim");
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isSearchResultsPresent());
+
+
+ }
+
+ @Test
+ public void searchNothingOnSite()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+
+ context.wait(10);
+ page.search("");
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isSearchResultsPresent());
+
+
+ }
+ @Test
+ public void sortByMMORPGLink()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clickSideMenuLink();
+ context.wait(5);
+ page.clickSideMenuSubLink();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isSideMenuLinkPresent());
+
+
+ }
+
+ @Test
+ public void advancedFilterByUser()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ SearchPage page1 = PageFactory.initElements(context.getDriver(), SearchPage.class);
+ context.wait(10);
+ page.search("Skyrim");
+ context.wait(5);
+ page1.clickMoreSearchLink();
+ context.wait(5);
+ page1.searchByUser("Max");
+ context.wait(5);
+ Assertions.assertTrue(SearchPage.isAdvancedSearchByUserCorrect());
+
+
+ }
+
+ @Test
+ public void allGiveupsFilter()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ AllGiveupsPage page1 = PageFactory.initElements(context.getDriver(), AllGiveupsPage.class);
+ context.wait(10);
+ page.clickAllGiveupsLink();
+ context.wait(5);
+ page1.changeStatusDropdownMenuToDied();
+ context.wait(5);
+ Assertions.assertTrue(AllGiveupsPage.isChangedStatusCorrectly());
+
+
+ }
+
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ //context.getDriver().manage().window().setSize(new Dimension(1366, 768));
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+}
diff --git a/kurnaev/src/test/java/MultimediaTests.java b/kurnaev/src/test/java/MultimediaTests.java
new file mode 100644
index 0000000..1aa494c
--- /dev/null
+++ b/kurnaev/src/test/java/MultimediaTests.java
@@ -0,0 +1,46 @@
+import org.openqa.selenium.support.PageFactory;
+
+import java.util.concurrent.TimeUnit;
+
+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 context.ChromeContext;
+import context.Context;
+import page.MainPage;
+import page.GamePage;
+
+public class MultimediaTests
+{
+ private final static String APP_URL = "http://gmt-max.net/";
+ private static Context context;
+
+ @Test
+ public void checkPictures()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ GamePage page1 = PageFactory.initElements(context.getDriver(), GamePage.class);
+ context.wait(10);
+ page.clickPreviewLink();
+ context.wait(5);
+ Assertions.assertTrue(GamePage.isPicturePresent());
+
+
+ }
+
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ //context.getDriver().manage().window().setSize(new Dimension(1366, 768));
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+}
diff --git a/kurnaev/src/test/java/NavigationTests.java b/kurnaev/src/test/java/NavigationTests.java
new file mode 100644
index 0000000..0a23c05
--- /dev/null
+++ b/kurnaev/src/test/java/NavigationTests.java
@@ -0,0 +1,119 @@
+import org.openqa.selenium.support.PageFactory;
+
+import java.util.concurrent.TimeUnit;
+
+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 context.ChromeContext;
+import context.Context;
+import page.MainPage;
+
+
+public class NavigationTests
+{
+
+ private final static String APP_URL = "http://gmt-max.net/";
+ private static Context context;
+
+
+ @Test
+ public void rulesLink()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clickRulesLink();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isRulesPresent());
+
+
+ }
+ @Test
+ public void previewLink()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clickPreviewLink();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isPreviewPresent());
+
+
+ }
+ @Test
+ public void popularGiveup()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clickpopularGiveup();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isPopularGiveupPresent());
+
+
+ }
+ @Test
+ public void externalLinks()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clickexternalLink();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isExternalLinkPresent());
+
+
+ }
+ @Test
+ public void lastMessageLink()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clicklastMessageLink();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.islastMessageLinkPresent());
+
+
+ }
+ @Test
+ public void sideMenuLink()
+ {
+
+ Context.getDriver().get(APP_URL);
+
+ MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
+ context.wait(10);
+ page.clickSideMenuLink();
+ context.wait(5);
+ page.clickSideMenuSubLink();
+ context.wait(5);
+ Assertions.assertTrue(MainPage.isSideMenuLinkPresent());
+
+
+ }
+ @BeforeAll
+ public static void setup() {
+ context = new ChromeContext();
+ context.start();
+ }
+
+ @AfterAll
+ public static void quit() {
+ context.close();
+ }
+
+}
+
diff --git a/kurnaev/src/test/java/context/ChromeContext.java b/kurnaev/src/test/java/context/ChromeContext.java
new file mode 100644
index 0000000..6bdc910
--- /dev/null
+++ b/kurnaev/src/test/java/context/ChromeContext.java
@@ -0,0 +1,25 @@
+package context;
+
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+
+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() {
+ 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/kurnaev/src/test/java/context/Context.java b/kurnaev/src/test/java/context/Context.java
new file mode 100644
index 0000000..be00d1a
--- /dev/null
+++ b/kurnaev/src/test/java/context/Context.java
@@ -0,0 +1,60 @@
+package context;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
+//import java.nio.file.*;
+//import java.io.File;
+
+public abstract class Context {
+ private final static String DRIVER_LOCATION = "drivers/%s";
+ protected static WebDriver driver;
+
+ public static WebDriver getDriver() {
+ if (driver != null) {
+ return driver;
+ }
+ throw new IllegalStateException("WebDriver is not initialized");
+ }
+
+ public void start() {
+ System.setProperty(getDriverType(), getDriverExecutablePath());
+ //driver = new ChromeDriver();
+ createDriver();
+ driver.manage().window().maximize();
+
+ // это плохая инструкция для автотестов, т.к. лучше задавать для конкретного элемента или кейса
+ driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
+ }
+
+ public void close() {
+ driver.quit();
+ }
+
+ public void wait(int sec) {
+ try {
+ TimeUnit.SECONDS.sleep(sec);
+ } catch (InterruptedException e) {
+ }
+ }
+
+ public void switchTab(int tabNum) { driver.switchTo().window(new ArrayList(driver.getWindowHandles()).get(tabNum).toString()); }
+
+ 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");
+ }
+}
diff --git a/kurnaev/src/test/java/context/FirefoxContext.java b/kurnaev/src/test/java/context/FirefoxContext.java
new file mode 100644
index 0000000..1d5c163
--- /dev/null
+++ b/kurnaev/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/kurnaev/src/test/java/page/AllGiveupsPage.java b/kurnaev/src/test/java/page/AllGiveupsPage.java
new file mode 100644
index 0000000..6951381
--- /dev/null
+++ b/kurnaev/src/test/java/page/AllGiveupsPage.java
@@ -0,0 +1,41 @@
+package page;
+
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.By;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.Select;
+
+public class AllGiveupsPage
+{
+ static WebDriver driver;
+
+
+ @FindBy(name = "status")
+ private WebElement statusDropdownMenu;
+
+
+
+
+ public AllGiveupsPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public void changeStatusDropdownMenuToDied() {
+ new Select(statusDropdownMenu).selectByIndex(4);
+ }
+
+ public static boolean isChangedStatusCorrectly() {
+ try {
+
+ return driver.findElement(By.name("status")).getText().indexOf("Мёртвые") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+}
diff --git a/kurnaev/src/test/java/page/GamePage.java b/kurnaev/src/test/java/page/GamePage.java
new file mode 100644
index 0000000..d8e878a
--- /dev/null
+++ b/kurnaev/src/test/java/page/GamePage.java
@@ -0,0 +1,71 @@
+package page;
+
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.By;
+import org.openqa.selenium.interactions.Actions;
+
+public class GamePage
+{
+ static WebDriver driver;
+
+ @FindBy(xpath = "//a[starts-with(@href,'/go.php?url=https://downloads-torrent.ru')]")
+ private WebElement downloadLink;
+
+ @FindBy(xpath = "//html/body[@class='rectangles']/main[@class='fill']/section[@class='section section--fill']/div[@class='container no-index']/div[@class='block block-download']/a[@id='btn--download']")
+ private WebElement downloadTorrentLink;
+
+ @FindBy(xpath = "//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='full_news_title']/div[@class='edit_news_block']/a[@id='fav-id-12362']")
+ private WebElement addToFavoritesGameButton;
+
+
+
+
+ public GamePage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public void clickDownloadLink() {
+ downloadLink.click();
+ }
+ public void clickDownloadTorrentLink() {
+ downloadTorrentLink.click();
+ }
+ public void clickAddToFavoritesGameButton() { addToFavoritesGameButton.click(); }
+
+ public static boolean isDownloadPagePresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body")).getText().indexOf("СКАЧАТЬ ТОРРЕНТ") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isPicturePresent() {
+ try {
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']")).getAttribute("innerHTML").indexOf("= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isAddedToFavorites() {
+ try {
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='full_news_title']/div[@class='edit_news_block']")).getAttribute("innerHTML").indexOf("minus_fav.gif") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+
+
+}
diff --git a/kurnaev/src/test/java/page/MainPage.java b/kurnaev/src/test/java/page/MainPage.java
new file mode 100644
index 0000000..54302ac
--- /dev/null
+++ b/kurnaev/src/test/java/page/MainPage.java
@@ -0,0 +1,215 @@
+package page;
+
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.By;
+import org.openqa.selenium.interactions.Actions;
+
+public class MainPage {
+ static WebDriver driver;
+
+
+
+ @FindBy(xpath = "//html/body/div[@class='main_head']/div[@id='overview']/div[@class='subnav']/div[@class='content']/ul[@class='navigation']/li[4]/a")
+ private WebElement rulesLink;
+
+ @FindBy(xpath = "//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='short_news_title'][1]/div[@class='short_news_title_center']/a")
+ private WebElement previewLinkContainer;
+
+ @FindBy(xpath = "//html/body/div[@class='content_main']/div[@class='main_right_col blocks']/a[@class='popular_torrents'][2]")
+ private WebElement popularGiveup;
+
+ @FindBy(xpath = "//a[@href='/forum/']")
+ private WebElement externalLink;
+
+ @FindBy(xpath = "//html/body/div[@class='content'][1]/div[@class='forum_block']/div[@class='forum_msg_block']/div[@class='ltContent']/table/tbody/tr[7]/td[@class='topicInfo']/a[@class='topicLink']")
+ private WebElement lastMessageLink;
+
+ @FindBy(xpath = "//html/body/div[@class='content_main']/div[@class='main_left_col blocks']/div[@id='firstpane'][2]/p[@class='menu_head1'][3]")
+ private WebElement sideMenuLink;
+
+ @FindBy(xpath = "//html/body/div[@class='content_main']/div[@class='main_left_col blocks']/div[@id='firstpane'][2]/div[@class='menu_body'][3]/a[2]")
+ private WebElement sideMenuSubLink;
+
+ @FindBy(id = "story")
+ private WebElement searchField;
+
+ @FindBy(xpath = "//html/body/div[@class='main_head']/div[@id='overview']/div[@class='subnav']/div[@class='content']/ul[@class='navigation']/li[5]/a")
+ private WebElement allGiveupsLink;
+
+ @FindBy(xpath = "//html/body/div[@class='main_head']/div[@class='content']/div[@class='login_block']/span/a[@id='loginlinkreg']")
+ private WebElement loginButton;
+
+ @FindBy(id = "login_name")
+ private WebElement loginNameField;
+
+ @FindBy(id = "login_password")
+ private WebElement loginPasswordField;
+
+ @FindBy(xpath = "//html/body/div[@class='ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable']/div[@id='logindialogreg']/center/form/button[@class='fbutton']")
+ private WebElement loginConfirmButton;
+
+ @FindBy(xpath = "//html/body/div[@class='main_head']/div[@class='content']/div[@class='login_block']/a")
+ private WebElement logOutButton;
+
+ @FindBy(xpath = "//html/body/div[@class='main_head']/div[@class='content']/div[@class='login_block']/span/a[2]")
+ private WebElement registrationButton;
+
+
+
+
+ public MainPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+
+
+
+ public void clickRulesLink() {
+ rulesLink.click();
+ }
+ public void clickPreviewLink() { previewLinkContainer.click(); }
+ public void clickpopularGiveup() { popularGiveup.click(); }
+ public void clickexternalLink() { externalLink.click(); }
+ public void clicklastMessageLink() { lastMessageLink.click(); }
+ public void clickSideMenuLink() { sideMenuLink.click(); }
+ public void clickSideMenuSubLink() { sideMenuSubLink.click(); }
+ public void search(String word) {searchField.sendKeys(word + "\n");}
+ public void clickAllGiveupsLink() { allGiveupsLink.click(); }
+ public void clickLoginButton() { loginButton.click(); }
+ public void enterTextToLoginField(String name) { loginNameField.sendKeys(name); }
+ public void enterTextToPasswordField(String pass) { loginPasswordField.sendKeys(pass); }
+ public void clickloginConfirmButton() { loginConfirmButton.click(); }
+ public void clickLogOutButton() { logOutButton.click(); }
+ public void clickRegistrationButton() { registrationButton.click(); }
+
+
+ public static boolean isRulesPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body")).getText().indexOf("ОСНОВНЫЕ ПРАВИЛА ТРЕКЕРА И ФОРУМА - GMT-MAX.NET")>=0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isPreviewPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='full_news_content']")).getText().indexOf("Год выпуска:")>=0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isPopularGiveupPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_right_col blocks']")).getText().indexOf(driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='full_news_title']/div[@class='full_news_title_center']/h1")).getText()) >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isExternalLinkPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body")).getText().indexOf("Форум") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean islastMessageLinkPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body")).getText().indexOf("СООБЩЕНИЙ В ТЕМЕ") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isSideMenuLinkPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_content_nav']")).getText().indexOf("Rpg") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isSearchResultsPresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='dpad radial infoblock']")).getAttribute("innerHTML").indexOf("value=\"Начать поиск\"") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+
+ public static boolean isLoggedIn() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='main_head']/div[@class='content']/div[@class='login_block']/span")).getText().indexOf("Привет") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+
+ public static boolean isLoggedOut() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='main_head']/div[@class='content']/div[@class='login_block']/span")).getText().indexOf("Вход") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+
+ public static boolean isRegistrationPagePresent() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body")).getText().indexOf("ОСНОВНЫЕ ПРАВИЛА ТРЕКЕРА И ФОРУМА - GMT-MAX.NET") >= 0 || driver.findElement(By.xpath("//html/body")).getText().indexOf("Регистрация нового пользователя") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+ public static boolean isNotLoggedIn() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@class='info_block']")).getText().indexOf("Ошибка авторизации") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+
+ }
+
+}
diff --git a/kurnaev/src/test/java/page/SearchPage.java b/kurnaev/src/test/java/page/SearchPage.java
new file mode 100644
index 0000000..de47bbb
--- /dev/null
+++ b/kurnaev/src/test/java/page/SearchPage.java
@@ -0,0 +1,48 @@
+package page;
+
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.By;
+import org.openqa.selenium.interactions.Actions;
+
+public class SearchPage
+{
+ static WebDriver driver;
+
+ @FindBy(xpath = "//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='dpad radial infoblock']/div[@id='searchtable']/form[@id='fullsearch']/table/tbody/tr/td[@class='search']/div/input[@id='dofullsearch']")
+ private WebElement moreSearchLink;
+
+ @FindBy(id = "searchuser")
+ private WebElement userSearchField;
+
+
+
+
+ public SearchPage(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ public void clickMoreSearchLink() {
+ moreSearchLink.click();
+ }
+ public void searchByUser(String user) {
+ userSearchField.sendKeys(user + "\n");
+ }
+
+ public static boolean isAdvancedSearchByUserCorrect() {
+ try {
+
+ return driver.findElement(By.xpath("//html/body/div[@class='content_main']/div[@class='main_center_col blocks']/div[@id='dle-content']/div[@class='dpad radial infoblock']")).getText().indexOf("Имя пользователя:") >= 0;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ }
+
+
+
+}
\ No newline at end of file