Compare commits

...

10 Commits

Author SHA1 Message Date
310eca5e80 Добавлено тестирование отдельных страниц с использование Шаблонногог метода.
Версия 3.0
2019-03-23 08:58:31 +04:00
76e1d98652 Улучшено тестирование поиска. Теперь проверяет элементы на странице. Версия 2.0 2018-05-13 18:28:40 +04:00
224452000a Улучшено тестирование поиска. Теперь проверяет элементы на странице 2018-05-11 23:08:00 +04:00
a46383c4fb Исправлены ошибки второго призыва.
Работа с авторизацией вынесена в отдельный класс.
Исправлены некоторые недочеты.
2018-05-07 15:45:03 +04:00
315eba8c26 Исправлены ошибки второго призыва.
Работа с авторизацией вынесена в отдельный класс.
2018-05-07 15:41:31 +04:00
96d2bb769c Исправлены ошибки:
1)Удалены коментарии
2)Удалены пустые строки
3)Удалены не используемые библиотеки
2018-05-05 23:02:04 +04:00
32cd4d5f6d Сделана вся работа. 2018-05-03 11:44:42 +04:00
f65a77694a Сделана большая часть работы. Закончены навигация и поиск. Осталось 1
кейс авторизации.
2018-04-29 18:54:28 +04:00
5d0024dc22 Сделана большая часть работы. Закончены навигация и поиск. Осталась авторизация 2018-04-28 13:18:57 +04:00
673fb05473 first commit 2018-04-05 11:08:20 +04:00
40 changed files with 1602 additions and 0 deletions

156
Skalkin/.gitignore vendored Normal file
View File

@ -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/

2
Skalkin/README.md Normal file
View File

@ -0,0 +1,2 @@
Selenium WebDriver example project

49
Skalkin/pom.xml Normal file
View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tis-2017</groupId>
<artifactId>tis-2017</artifactId>
<version>1.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.1.0-RC1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>ru.ulstu.tis.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>lib/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,8 @@
package ru.ulstu.tis;
public class Main {
public static void main(String[] args) {
System.out.println("666");
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,17 @@
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.support.PageFactory;
import page.ActorPage;
import page.MoviePage;
public class ActorPageTest extends TemplateMethod {
@Override
protected void testPart() {
context.getDriver().get(APP_URL_ACTOR);//Открыта страница фильма
ActorPage pageActor = PageFactory.initElements(context.getDriver(), ActorPage.class);//Выбрать пункт меню
pageActor.clickInfo();
MoviePage pageMovie = PageFactory.initElements(context.getDriver(), MoviePage.class);
Assertions.assertTrue(pageMovie.isMoviePagePresent());//Корректно отображена выбранная страница
}
}

View File

@ -0,0 +1,17 @@
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.support.PageFactory;
import page.AfishaPage;
import page.MainPage;
public class AfishaPageTest extends TemplateMethod {
@Override
protected void testPart() {
context.getDriver().get(APP_URL);//Открыта любая страница сайта, кроме специальных
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
page.clickSubMenu();
AfishaPage pageAfisha = PageFactory.initElements(context.getDriver(), AfishaPage.class);
Assertions.assertTrue(pageAfisha.isTopViewElementPresent());//Корректно отображена выбранная страница
}
}

View File

@ -0,0 +1,77 @@
import context.ChromeContext;
import context.Context;
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.*;
public class AutorizationTests {
private final static String APP_URL = "https://www.kinopoisk.ru/";
private final static String APP_URL_MOVIE = "https://www.kinopoisk.ru/film/mstiteli-voyna-beskonechnosti-2018-843649/";
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 testLoginSocial(){
context.getDriver().get(APP_URL);//Открыта страница фильма
LoginPage page = PageFactory.initElements(context.getDriver(), LoginPage.class);//Выбрать пункт меню
page.clickButtonLogin();
page.isFrameLogin();
page.frameLogin();
page.isButtonVK();
page.clickButtonVK();
page.frameDefault();
VKPage pageVk = PageFactory.initElements(context.getDriver(), VKPage.class);
pageVk.setOldWindow();
pageVk.switchToSocial();
Assertions.assertTrue(pageVk.isVkPagePresent());
pageVk.closeWindow();
pageVk.switchToOldWindow();
}
@Test
public void testLoginEmail() throws InterruptedException {
context.getDriver().get(APP_URL);//Открыта страница фильма
LoginPage page = PageFactory.initElements(context.getDriver(), LoginPage.class);//Выбрать пункт меню
page.clickButtonLogin();
page.isFrameLogin();
page.frameLogin();
page.insertEmail("sefyijupsi@tutye.com");
page.insertPassword("q1w2e3r4t5y6");
Thread.sleep(500);
page.insertSignInEnter();
page.frameDefault();
Assertions.assertTrue(page.isAutorization());
context.getDriver().get("https://www.kinopoisk.ru/logout/");
}
@Test
public void testLike(){
context.getDriver().get(APP_URL_MOVIE);//Открыта страница фильма
MoviePage page = PageFactory.initElements(context.getDriver(), MoviePage.class);//Выбрать пункт меню
page.clickLike();
Assertions.assertTrue(page.isErrorLike());
}
}

View File

@ -0,0 +1,16 @@
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.support.PageFactory;
import page.MainPage;
public class MainPageTest extends TemplateMethod {
@Override
protected void testPart() {
context.getDriver().get(APP_URL);//Открыта любая страница сайта, кроме специальных
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);//Выбрать пункт меню
page.clickLogo();
Assertions.assertTrue(page.isMainPagePresent());//Корректно отображена выбранная страница
}
}

View File

@ -0,0 +1,17 @@
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.support.PageFactory;
import page.ActorPage;
import page.MoviePage;
public class MoviePageTest extends TemplateMethod {
@Override
protected void testPart() {
context.getDriver().get(APP_URL_MOVIE);//Открыта страница фильма
MoviePage pageMovie = PageFactory.initElements(context.getDriver(), MoviePage.class);//Выбрать пункт меню
pageMovie.clickInfo();
ActorPage pageActor = PageFactory.initElements(context.getDriver(), ActorPage.class);
Assertions.assertTrue(pageActor.isActorPagePresent());//Корректно отображена выбранная страница
}
}

View File

@ -0,0 +1,127 @@
import context.ChromeContext;
import context.Context;
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.*;
public class NavigationTests{
private final static String APP_URL = "https://www.kinopoisk.ru/";
private final static String APP_URL_MOVIE = "https://www.kinopoisk.ru/film/mstiteli-voyna-beskonechnosti-2018-843649/";
protected final static String APP_URL_ACTOR = "https://www.kinopoisk.ru/name/1189311/";
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 testSubPageTop() {
context.getDriver().get(APP_URL);//Открыта любая страница сайта, кроме специальных
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
page.clickSubMenu();
AfishaPage pageAfisha = PageFactory.initElements(context.getDriver(), AfishaPage.class);
Assertions.assertTrue(pageAfisha.isTopViewElementPresent());//Корректно отображена выбранная страница
}
@Test
public void testLogo() {
context.getDriver().get(APP_URL);//Открыта любая страница сайта, кроме специальных
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);//Выбрать пункт меню
page.clickLogo();
Assertions.assertTrue(page.isMainPagePresent());//Корректно отображена выбранная страница
}
@Test
public void testInfoMovie() {
context.getDriver().get(APP_URL_MOVIE);//Открыта страница фильма
MoviePage pageMovie = PageFactory.initElements(context.getDriver(), MoviePage.class);//Выбрать пункт меню
pageMovie.clickInfo();
ActorPage pageActor = PageFactory.initElements(context.getDriver(), ActorPage.class);
Assertions.assertTrue(pageActor.isActorPagePresent());//Корректно отображена выбранная страница
}
@Test
public void testInfoActor() {
context.getDriver().get(APP_URL_ACTOR);//Открыта страница фильма
ActorPage pageActor = PageFactory.initElements(context.getDriver(), ActorPage.class);//Выбрать пункт меню
pageActor.clickInfo();
MoviePage pageMovie = PageFactory.initElements(context.getDriver(), MoviePage.class);
Assertions.assertTrue(pageMovie.isMoviePagePresent());//Корректно отображена выбранная страница
}
@Test
public void testDownMen() {
context.getDriver().get(APP_URL);//Открыта страница фильма
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);//Выбрать пункт меню
page.clickDownMenu();
RandomSearchPage pageSearch = PageFactory.initElements(context.getDriver(), RandomSearchPage.class);
Assertions.assertTrue(pageSearch.isRandomMovieFormPresent());//Корректно отображена выбранная страница
}
@Test
public void testRightMenu() {
context.getDriver().get(APP_URL);//Открыта страница фильма
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);//Выбрать пункт меню
page.clickRightMenu();
MoviePage pageMovie = PageFactory.initElements(context.getDriver(), MoviePage.class);
Assertions.assertTrue(pageMovie.isMoviePagePresent());//Корректно отображена выбранная страница
}
@Test
public void testSocialMovieMenu() {
context.getDriver().get(APP_URL_MOVIE);//Открыта страница фильма
MoviePage pageMovie = PageFactory.initElements(context.getDriver(), MoviePage.class);//Выбрать пункт меню
pageMovie.clickSocial();
VKPage pageVk = PageFactory.initElements(context.getDriver(), VKPage.class);
pageVk.setOldWindow();
pageVk.switchToSocial();
Assertions.assertTrue(pageVk.isVkPagePresent());
pageVk.closeWindow();
pageVk.switchToOldWindow();
}
@Test
public void testSocialActorMenu() {
context.getDriver().get(APP_URL_ACTOR);//Открыта страница фильма
ActorPage pageActor = PageFactory.initElements(context.getDriver(), ActorPage.class);//Выбрать пункт меню
pageActor.clickSocial();
VKPage pageVk = PageFactory.initElements(context.getDriver(), VKPage.class);
pageVk.setOldWindow();
pageVk.switchToSocial();
Assertions.assertTrue(pageVk.isVkPagePresent());
pageVk.closeWindow();
pageVk.switchToOldWindow();
}
}

View File

@ -0,0 +1,21 @@
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.support.PageFactory;
import page.search.SearchInTextPage;
import page.search.SearchInTextResultPage;
public class SearchPageTest extends TemplateMethod {
@Override
protected void testPart() {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchInTextPage page = PageFactory.initElements(context.getDriver(), SearchInTextPage.class);//Выбрать пункт меню
page.insertNameSearch("Веном");
page.enterSearch();
SearchInTextResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchInTextResultPage.class);//Корректно отображена выбранная страница
String str = pageResult.getNewsElementToString();
Assertions.assertTrue(pageResult.isListElementPresent("Веном"));
}
}

View File

@ -0,0 +1,157 @@
import context.ChromeContext;
import context.Context;
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 page.search.*;
public class SearchTests {
private final static String APP_URL = "https://www.kinopoisk.ru/";
private final static String APP_URL_MOVIE = "https://www.kinopoisk.ru/film/mstiteli-voyna-beskonechnosti-2018-843649/";
protected final static String APP_URL_ACTOR = "https://www.kinopoisk.ru/name/1189311/";
protected final static String APP_URL_SEARCH = "https://www.kinopoisk.ru/s/";
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 testSimpleSearch() {
context.getDriver().get(APP_URL);//Открыта любая страница сайта, кроме специальных
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);//Выбрать пункт меню
page.insertSearch("Кома");
page.enterSearch();
SearchExtendedResultPage pageTo = PageFactory.initElements(context.getDriver(), SearchExtendedResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageTo.isKomaFromResultElementPresent());
}
@Test
public void testExtendedSearch() {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchExtendedPage page = PageFactory.initElements(context.getDriver(), SearchExtendedPage.class);//Выбрать пункт меню
page.insertNameSearch("Кома");
page.openCountry();
page.clickCountry();
page.enterSearch();
SearchExtendedResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchExtendedResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isKomaFromResultElementPresent());
}
@Test
public void testSearchInText() {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchInTextPage page = PageFactory.initElements(context.getDriver(), SearchInTextPage.class);//Выбрать пункт меню
page.insertNameSearch("Веном");
page.enterSearch();
SearchInTextResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchInTextResultPage.class);//Корректно отображена выбранная страница
String str = pageResult.getNewsElementToString();
Assertions.assertTrue(pageResult.isListElementPresent("Веном"));
}
@Test
public void testSearchByPeople() {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchByPeoplePage page = PageFactory.initElements(context.getDriver(), SearchByPeoplePage.class);//Выбрать пункт меню
page.insertNameSearch("Безруков");
page.enterSearch();
SearchExtendedResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchExtendedResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isBezrukovFromResultElementPresent());
}
@Test
public void testSearchByCreators() throws InterruptedException {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchByCreatorsPage page = PageFactory.initElements(context.getDriver(), SearchByCreatorsPage.class);//Выбрать пункт меню
page.insertNameSearch("Безруков");
Thread.sleep(2500);
page.clickDown();
page.clickEnter();
Thread.sleep(1000);
page.enterSearch();
SearchByCreatorsResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchByCreatorsResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isBrigadaFromResultCreatorsPresent());
}
@Test
public void testSearchByUsers() {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchByUsersPage page = PageFactory.initElements(context.getDriver(), SearchByUsersPage.class);//Выбрать пункт меню
page.insertNameSearch("Антон");
page.enterSearch();
SearchExtendedResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchExtendedResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isUsersResultElementPresent("Антон"));
}
@Test
public void testSearchByKeyword() {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchByKeywordPage page = PageFactory.initElements(context.getDriver(), SearchByKeywordPage.class);//Выбрать пункт меню
page.insertNameSearch("Война");
page.enterSearch();
SearchByKeywordResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchByKeywordResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isFirstResultElementPresent("Война"));
}
@Test
public void testSearchMovieByWord() throws InterruptedException {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchMovieByWordPage page = PageFactory.initElements(context.getDriver(), SearchMovieByWordPage.class);//Выбрать пункт меню
page.insertNameSearch("Магия");
Thread.sleep(500);
page.clickDown();
Thread.sleep(500);
page.clickDown();
Thread.sleep(500);
page.clickEnter();
Thread.sleep(1000);
page.enterSearch();
SearchByCreatorsResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchByCreatorsResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isFirstResultByWordPresent());
}
@Test
public void testSearchByStudio() throws InterruptedException {
context.getDriver().get(APP_URL_SEARCH);//Открыта любая страница сайта, кроме специальных
SearchByStudioPage page = PageFactory.initElements(context.getDriver(), SearchByStudioPage.class);//Выбрать пункт меню
page.insertNameSearch("Disney");
Thread.sleep(1000);
page.enterSearch();
SearchByKeywordResultPage pageResult = PageFactory.initElements(context.getDriver(), SearchByKeywordResultPage.class);//Корректно отображена выбранная страница
Assertions.assertTrue(pageResult.isFirstResultElementPresent("Disney"));
}
}

View File

@ -0,0 +1,60 @@
import context.ChromeContext;
import context.Context;
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.AfishaPage;
import page.MainPage;
import page.RandomSearchPage;
public abstract class TemplateMethod {
protected final static String APP_URL = "https://www.kinopoisk.ru/";
protected final static String APP_URL_MOVIE = "https://www.kinopoisk.ru/film/koma-2018-933208/";
protected final static String APP_URL_ACTOR = "https://www.kinopoisk.ru/name/1189311/";
protected final static String APP_URL_SEARCH = "https://www.kinopoisk.ru/s/";
protected static Context context;
@BeforeAll
public final static void setup() {
context = new ChromeContext();
context.start();
context.getDriver().manage().window().setSize(new Dimension(1600, 900));
}
public final void testHeader() {
context.getDriver().get(APP_URL);//Открыта любая страница сайта, кроме специальных
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);
page.clickSubMenu();
AfishaPage pageAfisha = PageFactory.initElements(context.getDriver(), AfishaPage.class);
Assertions.assertTrue(pageAfisha.isTopViewElementPresent());//Корректно отображена выбранная страница
}
public final void testDownMenu() {
context.getDriver().get(APP_URL);//Открыта страница фильма
MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class);//Выбрать пункт меню
page.clickDownMenu();
Assertions.assertTrue(page.isMainPagePresent());//Корректно отображена выбранная страница
}
@Test
public final void templateTest() {
testHeader();
testPart();
testDownMenu();
}
protected abstract void testPart();
@AfterAll
public final static void quit() {
context.close();
}
}

View File

@ -0,0 +1,25 @@
package context;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
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;
}
}

View File

@ -0,0 +1,43 @@
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;
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");
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,31 @@
package page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class ActorPage {
WebDriver driver;
@FindBy(css = "#BestFilmList a")
private WebElement infoElement;
@FindBy(css = ".ya-share2__list a")
private WebElement socialElement;
public ActorPage(WebDriver driver) {
this.driver = driver;
}
public void clickInfo() {
infoElement.click();
}
public void clickSocial() {
socialElement.click();
}
public boolean isActorPagePresent() {
return infoElement.isDisplayed();
}
}

View File

@ -0,0 +1,23 @@
package page;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
public class AfishaPage {
WebDriver driver;
@FindBy(css = ".tableTopViewSeansMain")
private WebElement topViewElement;
public AfishaPage(WebDriver driver) {
this.driver = driver;
}
public boolean isTopViewElementPresent() {
return topViewElement.isDisplayed();
}
}

View File

@ -0,0 +1,112 @@
package page;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
public class LoginPage {
WebDriver driver;
@FindBy(css = ".header-fresh-user-partial-component__login-button")
private WebElement buttonLogin;
@FindBy(css = ".social-auth__item.social-auth__item_code_vk")
private WebElement buttonVK;
@FindBy(css = ".header-fresh-user-partial-component__avatar")
private WebElement elementAvatar;
@FindBy(name = "login")
private WebElement elementEmail;
@FindBy(name = "password")
private WebElement elementPassword;
@FindBy(css = ".link.link_secondary.auth__signup-link")
private WebElement elementRegister;
@FindBy(css = ".kp2-authapi-iframe")
private WebElement signInFrame;
@FindBy(xpath = "//a[@href='/logout/']")
private WebElement buttonLogout;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void clickButtonLogin() {
buttonLogin.click();
}
public void clickButtonVK() {
buttonVK.click();
}
public void clickButtonLogout() {
buttonLogout.click();
}
public void insertEmail(String str) {
elementEmail.sendKeys(str);
}
public void insertPassword(String str) {
elementPassword.sendKeys(str);
}
public void insertSignInEnter() {
elementPassword.sendKeys(Keys.ENTER);
}
public void isButtonVK() {
while(true){
try{
if(driver.findElement(By.cssSelector(".social-auth__item.social-auth__item_code_vk")).isDisplayed()){
return;
} else {
Thread.sleep(500);
}
}catch(Exception ex){ }
}
}
public void isFrameLogin() {
while(true){
try{
if(driver.findElement(By.name("kp2-authapi-iframe")).isDisplayed()){
return;
} else {
Thread.sleep(500);
}
}catch(Exception ex){ }
}
}
public void isButtonLogin() {
while(true){
try{
if(driver.findElement(By.name("kp2-authapi-iframe")).isDisplayed()){
return;
} else {
Thread.sleep(500);
}
}catch(Exception ex){ }
}
}
public void frameDefault(){
driver.switchTo().defaultContent();
}
public void frameLogin(){
driver.switchTo().frame(signInFrame);
}
public boolean isAutorization() {
return elementAvatar.isDisplayed();
}
}

View File

@ -0,0 +1,72 @@
package page;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.Console;
import java.util.concurrent.TimeUnit;
public class MainPage {
WebDriver driver;
@FindBy(css = ".kp-logo-partial-component")
private WebElement logoElement;
@FindBy(css = ".header-fresh-dropdown-partial-component__sidebar-link")
private WebElement menuElement;
@FindBy(css = ".header-fresh-partial-component__navigation-item")
private WebElement mainElement;
@FindBy(css = ".link.footer-partial-component__bottom-info-link")
private WebElement downMenuElement;
@FindBy(css = "#rigth_box_weekend_rus dd a")
private WebElement rightMenuElement;
@FindBy(css = ".header-fresh-search-partial-component__field")
private WebElement searchElement;
@FindBy(id = "index_news")
private WebElement newsBaners;
public MainPage(WebDriver driver) {
this.driver = driver;
}
public void clickSubMenu() {
Actions builder = new Actions(driver);
builder.moveToElement(mainElement).perform();
menuElement.sendKeys(Keys.RETURN);
}
public void clickLogo() {
logoElement.click();
}
public void clickDownMenu() {
downMenuElement.click();
}
public void clickRightMenu() {
rightMenuElement.click();
}
public void insertSearch(String str) {
searchElement.sendKeys(str);
}
public void enterSearch() {
searchElement.sendKeys(Keys.ENTER);
}
public boolean isMainPagePresent() {
return newsBaners.isDisplayed();
}
}

View File

@ -0,0 +1,45 @@
package page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class MoviePage {
WebDriver driver;
@FindBy(css = "#actorList a")
private WebElement infoElement;
@FindBy(css = ".ya-share2__list a")
private WebElement socialElement;
@FindBy(id = "btn_fav_film")
private WebElement buttonLike;
@FindBy(id = "ui_notice_container")
private WebElement infoError;
public MoviePage(WebDriver driver) {
this.driver = driver;
}
public void clickInfo() {
infoElement.click();
}
public void clickSocial() {
socialElement.click();
}
public void clickLike() {
buttonLike.click();
}
public boolean isErrorLike() {
return infoError.isDisplayed();
}
public boolean isMoviePagePresent() {
return infoElement.isDisplayed();
}
}

View File

@ -0,0 +1,20 @@
package page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class RandomSearchPage {
WebDriver driver;
@FindBy(css = ".randomMovie")
private WebElement randomMovieForm;
public RandomSearchPage(WebDriver driver) {
this.driver = driver;
}
public boolean isRandomMovieFormPresent() {
return randomMovieForm.isDisplayed();
}
}

View File

@ -0,0 +1,40 @@
package page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class VKPage {
WebDriver driver;
private String oldWindow;
@FindBy(id = "login_submit")
private WebElement formLoginVk;
public VKPage(WebDriver driver) {
this.driver = driver;
}
public void switchToSocial(){
for (String winHandle : driver.getWindowHandles()) {
driver.switchTo().window(winHandle);
}
}
public void setOldWindow() {
this.oldWindow = driver.getWindowHandle();
}
public void switchToOldWindow(){
if(oldWindow != "")
driver.switchTo().window(oldWindow);
}
public void closeWindow() {
driver.close();
}
public boolean isVkPagePresent() {
return formLoginVk.isDisplayed();
}
}

View File

@ -0,0 +1,42 @@
package page.search;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.List;
public class SearchByCreatorsPage {
WebDriver driver;
@FindBy(id = "btn_search_6")
private WebElement buttonElement;
@FindBy(id = "cr_search_field_1")
private WebElement nameElement;
public SearchByCreatorsPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void clickDown() {
nameElement.sendKeys(Keys.ARROW_DOWN);
}
public void clickEnter() {
nameElement.sendKeys(Keys.ENTER);
}
public void enterSearch() {
buttonElement.click();
}
// public boolean isUserPresent() {
// return topBaners.isDisplayed();
// }
}

View File

@ -0,0 +1,34 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchByCreatorsResultPage {
WebDriver driver;
@FindBy(css = ".search_adv")
private WebElement resultCreatorsElement;
@FindBy(xpath = "//a[@href='/film/brigada-2002-77039/sr/1/']")
private WebElement brigadaFromResultCreatorsElement;
@FindBy(xpath = "//a[@href='/film/garri-potter-i-filosofskiy-kamen-2001-689/sr/1/']")
private WebElement firstResultByWordElement;
public SearchByCreatorsResultPage(WebDriver driver) {
this.driver = driver;
}
public boolean isFirstResultByWordPresent() {
return firstResultByWordElement.isDisplayed();
}
public boolean isBrigadaFromResultCreatorsPresent() {
return brigadaFromResultCreatorsElement.isDisplayed();
}
public boolean isResultCreatorsPresent() {
return resultCreatorsElement.isDisplayed();
}
}

View File

@ -0,0 +1,28 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchByKeywordPage {
WebDriver driver;
@FindBy(css = "#keyword_search .submit.nice_button")
private WebElement buttonElement;
@FindBy(id = "find_keyword")
private WebElement nameElement;
public SearchByKeywordPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void enterSearch() {
buttonElement.click();
}
}

View File

@ -0,0 +1,38 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.List;
public class SearchByKeywordResultPage {
WebDriver driver;
@FindBy(css = ".news")
private WebElement newsElement;
@FindBy(xpath = "//*[@id=\'block_left_pad\']/div/table/tbody/tr/td/table[2]/tbody/tr/td/table[1]/tbody/tr")
private List<WebElement> listResultElement;
public SearchByKeywordResultPage(WebDriver driver) {
this.driver = driver;
}
public boolean isFirstResultElementPresent(String text) { //
boolean matched = true;
for (int i = 0; i < listResultElement.size()-1; i++) {
String str = listResultElement.get(i).getText();
if((i-2) % 3 == 0 && !str.toLowerCase().contains(text.toLowerCase())){
matched = false;
//break;
}
}
return matched;
}
public boolean isNewsElementPresent() {
return newsElement.isDisplayed();
}
}

View File

@ -0,0 +1,27 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchByPeoplePage {
WebDriver driver;
@FindBy(css = ".el_8.submit.nice_button")
private WebElement buttonElement;
@FindBy(id = "find_people")
private WebElement nameElement;
public SearchByPeoplePage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void enterSearch() {
buttonElement.click();
}
}

View File

@ -0,0 +1,27 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchByStudioPage {
WebDriver driver;
@FindBy(css = "#studio_search .submit.nice_button")
private WebElement buttonElement;
@FindBy(id = "find_studio")
private WebElement nameElement;
public SearchByStudioPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void enterSearch() {
buttonElement.click();
}
}

View File

@ -0,0 +1,27 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchByUsersPage {
WebDriver driver;
@FindBy(css = ".el_9.submit.nice_button")
private WebElement buttonElement;
@FindBy(id = "name")
private WebElement nameElement;
public SearchByUsersPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void enterSearch() {
buttonElement.click();
}
}

View File

@ -0,0 +1,20 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchByUsersResultPage {
WebDriver driver;
@FindBy(id = "profileInfoWrap")
private WebElement element;
public SearchByUsersResultPage(WebDriver driver) {
this.driver = driver;
}
public boolean isUserPresent() {
return element.isDisplayed();
}
}

View File

@ -0,0 +1,43 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.List;
public class SearchExtendedPage {
WebDriver driver;
@FindBy(css = ".el_18.submit.nice_button")
private WebElement buttonElement;
@FindBy(id = "find_film")
private WebElement nameElement;
@FindBy(id = "country")
private WebElement countryElement;
@FindBy(css = "#country option")
private List<WebElement> countryToElement;
public SearchExtendedPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void openCountry() {
countryElement.click();
}
public void clickCountry() {
countryToElement.get(1).click();
}
public void enterSearch() {
buttonElement.click();
}
}

View File

@ -0,0 +1,53 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.List;
public class SearchExtendedResultPage {
WebDriver driver;
@FindBy(css = ".search_results_top")
private WebElement resultTopElement;
@FindBy(xpath = "//a[@href='/film/koma-2018-933208/sr/1/']")
private WebElement komaFromResultElement;
@FindBy(xpath = "//a[@href='/name/224620/sr/1/']")
private WebElement bezrukovFromResultElement;
@FindBy(css = ".element")
private List<WebElement> usersListResultElement;
public SearchExtendedResultPage(WebDriver driver) {
this.driver = driver;
}
public boolean isUsersResultElementPresent(String text) {
boolean matched = true;
for (int i = 0; i < usersListResultElement.size(); i++) {
if(!usersListResultElement.get(i).getText().toLowerCase().contains(text.toLowerCase())){
matched = false;
break;
}
}
return matched;
}
public boolean isBezrukovFromResultElementPresent() {
return bezrukovFromResultElement.isDisplayed();
}
public boolean isKomaFromResultElementPresent() {
return komaFromResultElement.isDisplayed();
}
public boolean isResultTopElementPresent() {
return resultTopElement.isDisplayed();
}
}

View File

@ -0,0 +1,27 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchInTextPage {
WebDriver driver;
@FindBy(css = ".el_12.submit.nice_button")
private WebElement buttonElement;
@FindBy(id = "txt_search_input")
private WebElement nameElement;
public SearchInTextPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void enterSearch() {
buttonElement.click();
}
}

View File

@ -0,0 +1,41 @@
package page.search;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.lang.reflect.Method;
import java.util.List;
public class SearchInTextResultPage {
WebDriver driver;
@FindBy(css = ".textorangebig")
private WebElement headerElement;
@FindBy(css = ".news")
private WebElement newsElement; //
@FindBy(xpath = "//*[@id='block_left_pad']/div/table/tbody/tr/td/table[2]/tbody/tr/td/table[2]/tbody/tr")
private List<WebElement> listNewsElement;
public SearchInTextResultPage(WebDriver driver) {
this.driver = driver;
}
public String getNewsElementToString(){
return newsElement.getText();
}
public boolean isListElementPresent(String text) {
boolean matched = true;
for (int i = 4; i < listNewsElement.size(); i++) {
if((i-1) % 3 == 0 && !listNewsElement.get(i).getText().toLowerCase().contains(text.toLowerCase())){
matched = false;
break;
}
}
return matched;
}
}

View File

@ -0,0 +1,36 @@
package page.search;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class SearchMovieByWordPage {
WebDriver driver;
@FindBy(id = "search_button")
private WebElement buttonElement;
@FindBy(id = "search_field_1")
private WebElement nameElement;
public SearchMovieByWordPage(WebDriver driver) {
this.driver = driver;
}
public void insertNameSearch(String str) {
nameElement.sendKeys(str);
}
public void clickDown() {
nameElement.sendKeys(Keys.ARROW_DOWN);
}
public void clickEnter() {
nameElement.sendKeys(Keys.ENTER);
}
public void enterSearch() {
buttonElement.click();
}
}