diff --git a/Semenova/.gitignore b/Semenova/.gitignore new file mode 100644 index 0000000..3bac491 --- /dev/null +++ b/Semenova/.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/Semenova/README.md b/Semenova/README.md new file mode 100644 index 0000000..635e81b --- /dev/null +++ b/Semenova/README.md @@ -0,0 +1,2 @@ +Selenium WebDriver example project + diff --git a/Semenova/pom.xml b/Semenova/pom.xml new file mode 100644 index 0000000..f488c6e --- /dev/null +++ b/Semenova/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + AutoTesting + AutoTesting + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + + org.seleniumhq.selenium + selenium-java + LATEST + + + junit + junit + 4.12 + + + org.twitter4j + twitter4j-core + 4.0.4 + + + + \ No newline at end of file diff --git a/Semenova/src/main/java/App.java b/Semenova/src/main/java/App.java new file mode 100644 index 0000000..6f0cac1 --- /dev/null +++ b/Semenova/src/main/java/App.java @@ -0,0 +1,5 @@ +public class App { + public static void main(String[] args) { + + } +} diff --git a/Semenova/src/main/resources/drivers/chromedriver b/Semenova/src/main/resources/drivers/chromedriver new file mode 100644 index 0000000..02ff671 Binary files /dev/null and b/Semenova/src/main/resources/drivers/chromedriver differ diff --git a/Semenova/src/main/resources/drivers/chromedriver.exe b/Semenova/src/main/resources/drivers/chromedriver.exe new file mode 100644 index 0000000..28a4067 Binary files /dev/null and b/Semenova/src/main/resources/drivers/chromedriver.exe differ diff --git a/Semenova/src/test/java/CalculatorTest.java b/Semenova/src/test/java/CalculatorTest.java new file mode 100644 index 0000000..e3a5c14 --- /dev/null +++ b/Semenova/src/test/java/CalculatorTest.java @@ -0,0 +1,56 @@ +import PageHelpers.CalculatorPageHelper; +import Pages.CalculatorPage; +import context.ChromeContext; +import context.Context; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.support.PageFactory; + +import java.util.logging.Logger; + +import static java.util.logging.Level.INFO; + +public class CalculatorTest { + + private final static String APP_URL = "http://www.gazprom.ru/investors/stock/investor-tools/calc/"; + private static Logger log = Logger.getLogger(CalculatorTest.class.getName()); + private static Context context; + + @Before + public void setup() { + context = new ChromeContext(); + context.start(); + context.getDriver().manage().window().setSize(new Dimension(1600, 900)); + + context.getDriver().get(APP_URL); + } + + @After + public void quit() { + + context.close(); + } + + @Test + public void countInvestor() throws InterruptedException, NoSuchMethodException { + log.logp(INFO, getClass().getName(), "countInvestor", "Investor's count test"); + + CalculatorPage calculatorPage = PageFactory.initElements(context.getDriver(), CalculatorPage.class); + calculatorPage.switchToCalcFrame(); + + CalculatorPageHelper calculatorPageHelper = new CalculatorPageHelper(calculatorPage); + + calculatorPageHelper.waitAndInsertFromDate("30.09.2011"); + calculatorPageHelper.waitAndInsertToDate("01.02.2018"); + calculatorPageHelper.waitAndInsertAmount("1"); + + calculatorPage.clickCalcBtn(); + + Thread.sleep(1000); + + Assert.assertTrue(calculatorPageHelper.isCalculationRight()); + } +} diff --git a/Semenova/src/test/java/DocumentTests.java b/Semenova/src/test/java/DocumentTests.java new file mode 100644 index 0000000..ece2d90 --- /dev/null +++ b/Semenova/src/test/java/DocumentTests.java @@ -0,0 +1,95 @@ +import Pages.ForShareholders; +import Pages.JournalsPage; +import Pages.MainPage; +import Pages.PressPage; +import context.ChromeContext; +import context.Context; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.support.PageFactory; + +import java.io.File; +import java.util.logging.Logger; + +import static java.util.logging.Level.INFO; + +public class DocumentTests { + + private final static String APP_URL = "http://www.gazprom.ru/"; + + private static Logger log = Logger.getLogger(DocumentTests.class.getName()); + private static Context context; + + private String tmpPath; + + @Before + public void setup() { + context = new ChromeContext(); + context.start(); + context.getDriver().manage().window().setSize(new Dimension(1600, 900)); + + context.getDriver().get(APP_URL); + + tmpPath = context.getTmpPath(); + } + + @After + public void quit() { + context.close(); + } + + @Test + public void downloadDocs() throws InterruptedException { + log.logp(INFO, getClass().getName(), "downloadDocs", "Downloading test"); + + MainPage page = PageFactory.initElements(context.getDriver(), MainPage.class); + page.clickMenuElementShareholder(); + + ForShareholders shareholdersPage = PageFactory.initElements(context.getDriver(), ForShareholders.class); + int elementNumber = 0; + String fileName = shareholdersPage.getFileName(elementNumber); + shareholdersPage.clickDownloadLink(elementNumber); + + log.logp(INFO, getClass().getName(), "downloadDocs", "Path: "+tmpPath +fileName); + + 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 tabs2 = new ArrayList (context.getDriver().getWindowHandles()); + context.getDriver().switchTo().window(tabs2.get(1)); + + Assert.assertTrue(context.getDriver().getTitle().contains(title)); + } +} diff --git a/Semenova/src/test/java/PageHelpers/AlbumPageHelper.java b/Semenova/src/test/java/PageHelpers/AlbumPageHelper.java new file mode 100644 index 0000000..e727a96 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/AlbumPageHelper.java @@ -0,0 +1,42 @@ +package PageHelpers; + +import Pages.AlbumPage; + +import java.lang.reflect.Method; + +public class AlbumPageHelper { + private AlbumPage page; + public AlbumPageHelper(AlbumPage page){ + this.page = page; + } + + public boolean containsPreview(String preview) { + boolean containsPreview = false; + for (int i = 0; i < page.getImagesCount(); i++) { + String previewCur = page.getImageName(i); + + if(preview.equals(previewCur)) { + containsPreview = true; + } + } + + return containsPreview; + } + + public boolean isSelectedPhoto(int elementNumber) throws NoSuchMethodException { + + Method method = AlbumPageHelper.class.getMethod("clickAndCheckSelectedPhoto", int.class); + return WaitingForElementToLoadHelper.waitAndCheckSelection(method,this,new Object[]{elementNumber}); + } + + public void clickPhotoLink(int elementNumber) throws NoSuchMethodException { + + Method method = AlbumPage.class.getMethod("clickPhotoLink", int.class); + WaitingForElementToLoadHelper.waitAndCallMethod(method,page,new Object[]{elementNumber}); +} + + public boolean clickAndCheckSelectedPhoto(int elementNumber){ + page.clickPhotoPopup(); + return page.isSelectedPhoto(elementNumber); + } +} diff --git a/Semenova/src/test/java/PageHelpers/CalculatorPageHelper.java b/Semenova/src/test/java/PageHelpers/CalculatorPageHelper.java new file mode 100644 index 0000000..24fc943 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/CalculatorPageHelper.java @@ -0,0 +1,60 @@ +package PageHelpers; + +import Pages.CalculatorPage; +import org.openqa.selenium.WebElement; + +import java.lang.reflect.Method; + +import static java.lang.Math.round; + +public class CalculatorPageHelper { + + private CalculatorPage page; + Method insertInputMethod = CalculatorPageHelper.class.getMethod("insertInput", new Class[]{WebElement.class, String.class}); + + public CalculatorPageHelper(CalculatorPage page) throws NoSuchMethodException { + this.page = page; + } + + public boolean isCalculationRight( ){ + double startPrice = page.getStartPrice(); + double endPrice = page.getEndPrice(); + double reInvPrice = page.getReInvPrice(); + + double changePrice = page.getChangePrice(); + double changePriceRe = page.getChangePriceRe(); + double income = page.getIncome(); + + return isIncomeRight(startPrice,endPrice,income) + &&isChangePriceRight(startPrice,changePrice,income) + &&isChangePriceReRight(startPrice,changePriceRe,reInvPrice); + } + + private boolean isIncomeRight( double startPrice,double endPrice, double income){ + return ((double) round((endPrice-startPrice) * 100))/100==income; + } + private boolean isChangePriceRight( double startPrice,double changePrice, double income){ + return ((double) round(income/startPrice * 100*100))/100==changePrice; + } + private boolean isChangePriceReRight( double startPrice,double changePriceRe, double reInvPrice){ + return ((double) round((reInvPrice-startPrice)/startPrice*100 *100))/100 ==changePriceRe; + } + + public void waitAndInsertFromDate(String date) { + WaitingForElementToLoadHelper.waitAndCallMethod(insertInputMethod,this,new Object[]{page.getFromDateInput(),date}); + } + + public void insertInput(WebElement element,String text){ + element.clear(); + element.sendKeys(text); + } + + public void waitAndInsertToDate(String date){ + WaitingForElementToLoadHelper.waitAndCallMethod(insertInputMethod,this,new Object[]{page.getToDateInput(),date}); + } + + public void waitAndInsertAmount(String amount){ + WaitingForElementToLoadHelper.waitAndCallMethod(insertInputMethod,this,new Object[]{page.getAmountInput(),amount}); + + } +} diff --git a/Semenova/src/test/java/PageHelpers/EventsPageHelper.java b/Semenova/src/test/java/PageHelpers/EventsPageHelper.java new file mode 100644 index 0000000..2edd20b --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/EventsPageHelper.java @@ -0,0 +1,35 @@ +package PageHelpers; + +import Pages.EventsPage; + +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 EventsPageHelper { + + private EventsPage page; + public EventsPageHelper(EventsPage page){ + this.page = page; + } + public boolean eventsMatchByMonth(int month) throws ParseException { + + boolean suitable = true; + DateFormat format = new SimpleDateFormat("d MMMM, hh:mm"); + Calendar calendar = new GregorianCalendar(); + + for (int i = 0; i < page.getResultsCount(); i++) { + Date dateCur = format.parse(page.getDateOfResult(i)); + calendar.setTime(dateCur); + + if(calendar.get(Calendar.MONTH)!=month){ + suitable = false; + break; + } + } + return suitable; + } +} diff --git a/Semenova/src/test/java/PageHelpers/FeedbackPageHelper.java b/Semenova/src/test/java/PageHelpers/FeedbackPageHelper.java new file mode 100644 index 0000000..39969b8 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/FeedbackPageHelper.java @@ -0,0 +1,16 @@ +package PageHelpers; + +import Pages.FeedbackPage; + +public class FeedbackPageHelper { + private FeedbackPage page; + String successMessage = "Ваше сообщение отправлено."; + public FeedbackPageHelper(FeedbackPage page){ + this.page = page; + } + + public boolean isReceiveSuccess(){ + String output = page.getOutput(); + return output.equals(successMessage); + } +} diff --git a/Semenova/src/test/java/PageHelpers/MediaLibPageHelper.java b/Semenova/src/test/java/PageHelpers/MediaLibPageHelper.java new file mode 100644 index 0000000..1203f17 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/MediaLibPageHelper.java @@ -0,0 +1,37 @@ +package PageHelpers; + +import Pages.MediaLib; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.logging.Logger; + +import static java.util.logging.Level.WARNING; + +public class MediaLibPageHelper { + private static java.util.logging.Logger log = Logger.getLogger(SearchResultsPageHelper.class.getName()); + private MediaLib page; + public MediaLibPageHelper(MediaLib page){ + this.page = page; + } + + public boolean itemsAreInOrder() throws ParseException { + boolean order = true; + DateFormat format = new SimpleDateFormat("yyyy.M.d H:m"); + Date datePrev = format.parse(page.getDateOfItem(0)); + + for (int i = 1; i < page.getItemsCount(); i++) { + Date dateCur = format.parse(page.getDateOfItem(i)); + if(dateCur.after(datePrev)) { + log.logp(WARNING, getClass().getName(), "albumList", "Date current: '"+dateCur +"', Date previous: '"+datePrev+"'"); + order = false; + break; + } + datePrev = dateCur; + } + + return order; + } +} diff --git a/Semenova/src/test/java/PageHelpers/PurchasePageHelper.java b/Semenova/src/test/java/PageHelpers/PurchasePageHelper.java new file mode 100644 index 0000000..fd9b1b4 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/PurchasePageHelper.java @@ -0,0 +1,23 @@ +package PageHelpers; + +import Pages.PurchasesPage; + +import java.lang.reflect.Method; +import java.util.logging.Logger; + +public class PurchasePageHelper { + + private static java.util.logging.Logger log = Logger.getLogger(SearchResultsPageHelper.class.getName()); + private PurchasesPage page; + private int limit = 10; + public PurchasePageHelper(PurchasesPage page){ + this.page = page; + } + + public boolean waitAndCheckPageSelection(int pageNumber) throws InterruptedException, NoSuchMethodException { + + Method method = PurchasesPage.class.getMethod("isSelectedPage", int.class); + return WaitingForElementToLoadHelper.waitAndCheckSelection(method,page,new Object[]{pageNumber}); + } + +} diff --git a/Semenova/src/test/java/PageHelpers/SearchResultsPageHelper.java b/Semenova/src/test/java/PageHelpers/SearchResultsPageHelper.java new file mode 100644 index 0000000..29f0e75 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/SearchResultsPageHelper.java @@ -0,0 +1,90 @@ +package PageHelpers; + +import Pages.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; +import java.util.logging.Logger; + +import static java.util.logging.Level.WARNING; + +public class SearchResultsPageHelper { + + private static java.util.logging.Logger log = Logger.getLogger(SearchResultsPageHelper.class.getName()); + private SearchResultsPage page; + public SearchResultsPageHelper(SearchResultsPage page){ + this.page = page; + } + + public boolean searchResultsMatchQueryAndInOrder(String queryString) throws ParseException, NoSuchMethodException { + + boolean order = true; + DateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + Date datePrev = new Date(); + boolean matched = true; + + for (int i = 0; i < page.getItemsCount(); i++) { + Date dateCur = format.parse(waitAngGetItemsDate(i)); + + if(dateCur.after(datePrev)) { + log.logp(WARNING, getClass().getName(), "simpleSearch", "Date current: '"+dateCur +"', Date previous: '"+datePrev+"'"); + order = false; + break; + } + + if(!waitAngGetItemsText(i).toLowerCase().contains(queryString)){ + log.logp(WARNING, getClass().getName(), "simpleSearch", "'" + waitAngGetItemsText(i)+"' is not suitable for '"+queryString+"'"); + matched = false; + break; + } + + datePrev= dateCur; + } + return order&&matched; + + } + public boolean searchResultsMatchQueryYearAndInOrder(String queryString, int year) throws ParseException, NoSuchMethodException { + boolean order = searchResultsMatchQueryAndInOrder(queryString); + + DateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + Calendar calendar = new GregorianCalendar(); + boolean matched = true; + + for (int i = 0; i < page.getItemsCount(); i++) { + Date dateCur = format.parse(waitAngGetItemsDate(i)); + calendar.setTime(dateCur); + + matched = matchedByYear(calendar,year); + if(!matched){ + log.logp(WARNING, getClass().getName(), "searchResultsMatchQueryYearAndInOrder", + " '"+calendar.get(Calendar.YEAR)+"' != '"+year+"'"); + + } + } + + return order&&matched; + } + + private boolean matchedByYear(Calendar calendar,int year){ + return calendar.get(Calendar.YEAR)==year; + } + + public String waitAngGetItemsText(int itemNumber) throws NoSuchMethodException { + + Method method = SearchResultsPage.class.getMethod("getItemsText", int.class); + return (String)WaitingForElementToLoadHelper.waitAndCallMethod(method,page,new Object[]{itemNumber}); + + } + + public String waitAngGetItemsDate(int itemNumber) throws NoSuchMethodException { + + Method method = SearchResultsPage.class.getMethod("getItemsDate", int.class); + return (String) WaitingForElementToLoadHelper.waitAndCallMethod(method, page, new Object[]{itemNumber}); + + } + } diff --git a/Semenova/src/test/java/PageHelpers/SubsidiariesPageHelper.java b/Semenova/src/test/java/PageHelpers/SubsidiariesPageHelper.java new file mode 100644 index 0000000..ea14569 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/SubsidiariesPageHelper.java @@ -0,0 +1,51 @@ +package PageHelpers; + +import Pages.SubsidiariesPage; + +import java.lang.reflect.Method; +import java.util.logging.Logger; + +import static java.util.logging.Level.WARNING; + + +public class SubsidiariesPageHelper { + private static java.util.logging.Logger log = Logger.getLogger(SearchResultsPageHelper.class.getName()); + private SubsidiariesPage page; + public SubsidiariesPageHelper(SubsidiariesPage page){ + this.page = page; + } + + public boolean isOrder() throws Exception { + + boolean order = checkPercents(page, "getPartOfItemPercent100","compareMethodEquals100",page.getItemsPercent100Count()) + &&checkPercents(page, "getPartOfItemPercentMore50","compareMethodMore50",page.getItemsPercentMore50Count()) + &&checkPercents(page, "getPartOfItemPercentLess50","compareMethodLess50",page.getItemsPercentLess50Count()); + + return order; + } + private boolean checkPercents( Object object, String getPartMethodName,String compareMethodName,int numberOfElements) throws Exception { + + Method getPartMethod = SubsidiariesPage.class.getMethod(getPartMethodName,int.class); + Method compareMethod = SubsidiariesPageHelper.class.getMethod(compareMethodName,float.class); + + for (int i = 0; i < numberOfElements; i++) { + float percent = (Float)(getPartMethod.invoke(object, i)); + + if(!(Boolean)(compareMethod.invoke(this, percent))){ + log.logp(WARNING, getClass().getName(), "sorting", getPartMethod.getName()+"!" +percent); + return false; + } + } + return true; + } + + public boolean compareMethodEquals100(float percent){ + return percent==100; + } + public boolean compareMethodMore50(float percent){ + return percent>50; + } + public boolean compareMethodLess50(float percent){ + return percent<=50; + } +} \ No newline at end of file diff --git a/Semenova/src/test/java/PageHelpers/WaitingForElementToLoadHelper.java b/Semenova/src/test/java/PageHelpers/WaitingForElementToLoadHelper.java new file mode 100644 index 0000000..d805bc8 --- /dev/null +++ b/Semenova/src/test/java/PageHelpers/WaitingForElementToLoadHelper.java @@ -0,0 +1,47 @@ +package PageHelpers; + +import java.lang.reflect.Method; +import java.util.logging.Logger; + +import static java.util.logging.Level.WARNING; + +public class WaitingForElementToLoadHelper { + private static java.util.logging.Logger log = Logger.getLogger(WaitingForElementToLoadHelper.class.getName()); + 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 hyperlinkElements; + + @FindBy(css = ".subnavigation li") + private List subMenuElements; + + private static int subsidariesPageMenuElementNumber = 4; + private static int miningHyperLinkNumber = 0; + + public AboutPage(WebDriver driver) { + this.driver = driver; + } + + public void clickHyperlinksMiningElement(){ + hyperlinkElements.get(miningHyperLinkNumber).click(); + } + + public void clickMenuElementSubsidaries(){ + subMenuElements.get(subsidariesPageMenuElementNumber).click(); + } + +} diff --git a/Semenova/src/test/java/Pages/AlbumPage.java b/Semenova/src/test/java/Pages/AlbumPage.java new file mode 100644 index 0000000..8d0bda2 --- /dev/null +++ b/Semenova/src/test/java/Pages/AlbumPage.java @@ -0,0 +1,72 @@ +package Pages; + +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebDriverException; +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.util.logging.Logger; + +import static java.util.logging.Level.INFO; + +public class AlbumPage { + + private WebDriverWait wait; + private WebDriver driver; + private static java.util.logging.Logger log = Logger.getLogger(AlbumPage.class.getName()); + + @FindBy(css = ".media__list .media__item img") + private List albumImages; + + @FindBy(css = ".media__popup__thumbs .media__popup__thumb img") + private List photosPopupImg; + + @FindBy(css = ".media__popup__thumbs .media__popup__thumb") + private List photosPopup; + + @FindBy(css = ".media__popup__thumbs .media__popup__thumb:not(.media__popup__thumb--selected)") + private WebElement notSelectedThump; + + public AlbumPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public String getImageName(int elementNumber){ + String imageName = albumImages.get(elementNumber).getAttribute("src"); + imageName = imageName.substring(imageName.lastIndexOf("/")+1); + if(imageName.contains("_")) + imageName = imageName.substring(imageName.lastIndexOf("_")+1); + + return imageName; + } + + public int getImagesCount(){ + return albumImages.size(); + } + + public void clickPhotoLink(int elementNumber) { + wait.until(ExpectedConditions.visibilityOf(albumImages.get(elementNumber))); + albumImages.get(elementNumber).click(); + } + + public void clickPhotoPopup() { + try{ + notSelectedThump.click(); + }catch (WebDriverException e){ + JavascriptExecutor executor = (JavascriptExecutor)driver; + executor.executeScript("arguments[0].click()", notSelectedThump); + log.logp(INFO, getClass().getName(), "clickPhotoPopup", "Exception in clickPhotoPopup method"); + } + + + } + + public boolean isSelectedPhoto(int elementNumber){ + return photosPopup.get(elementNumber).getAttribute("class").contains("media__popup__thumb--selected"); + } +} diff --git a/Semenova/src/test/java/Pages/CalculatorPage.java b/Semenova/src/test/java/Pages/CalculatorPage.java new file mode 100644 index 0000000..eaa2658 --- /dev/null +++ b/Semenova/src/test/java/Pages/CalculatorPage.java @@ -0,0 +1,118 @@ +package Pages; + +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 CalculatorPage { + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".tbl_box #fromDate") + private WebElement fromDateInput; + + @FindBy(css = ".tbl_box #toDate") + private WebElement toDateInput; + + @FindBy(css = ".tbl_box #amountOfShares") + private WebElement amountInput; + + @FindBy(css = ".tbl_box table tr:nth-child(8) input") + private WebElement calculateBtn; + + @FindBy(css = ".result tr") + private List tableElements; + + @FindBy(css = ".result tr:nth-child(11) td:nth-child(2)") + private WebElement startPrice; + + @FindBy(css = ".result tr:nth-child(12) td:nth-child(2)") + private WebElement endPrice; + + @FindBy(css = ".result tr:nth-child(13) td:nth-child(3)") + private WebElement reInvPrice; + + @FindBy(css = ".result tr:nth-child(3) td:nth-child(2)") + private WebElement changePrice; + + @FindBy(css = ".result tr:nth-child(7) td:nth-child(2)") + private WebElement changePriceRe; + + @FindBy(css = ".result tr:nth-child(1) span") + private WebElement income; + + @FindBy(id = "ruCalc") + private WebElement ruCalcFrame; + + @FindBy(name = "chart") + private WebElement chartFrame; + + public CalculatorPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public void switchToCalcFrame(){ + wait.until(ExpectedConditions.visibilityOf(ruCalcFrame)); + driver.switchTo().frame(ruCalcFrame); + wait.until(ExpectedConditions.visibilityOf(chartFrame)); + driver.switchTo().frame(chartFrame); + + } + + public void clickCalcBtn(){ + calculateBtn.click(); + } + + public double getStartPrice(){ + + String tmp = startPrice.getText(); + tmp = tmp.substring(0,tmp.lastIndexOf(" ")+1); + return Double.parseDouble(tmp.replace(",",".").replace(" ","")); + } + + public double getEndPrice(){ + String tmp = endPrice.getText(); + tmp = tmp.substring(0,tmp.lastIndexOf(" ")+1); + return Double.parseDouble(tmp.replace(",",".").replace(" ","")); + } + + public double getReInvPrice(){ + String tmp = reInvPrice.getText(); + tmp = tmp.substring(0,tmp.lastIndexOf(" ")+1); + return Double.parseDouble(tmp.replace(",",".").replace(" ","")); + } + + public double getChangePrice(){ + String tmp = changePrice.getText(); + tmp = tmp.substring(0,tmp.lastIndexOf("%")); + return Double.parseDouble(tmp.replace(",",".").replace(" ","")); + } + + public double getChangePriceRe(){ + String tmp = changePriceRe.getText(); + tmp = tmp.substring(0,tmp.lastIndexOf("%")); + return Double.parseDouble(tmp.replace(",",".").replace(" ","")); + } + + public double getIncome(){ + String tmp = income.getText(); + return Double.parseDouble(tmp.replace(",",".").replace(" ","")); + } + + public WebElement getFromDateInput() { + return fromDateInput; + } + + public WebElement getToDateInput() { + return toDateInput; + } + + public WebElement getAmountInput() { + return amountInput; + } +} diff --git a/Semenova/src/test/java/Pages/EventsPage.java b/Semenova/src/test/java/Pages/EventsPage.java new file mode 100644 index 0000000..4bf9347 --- /dev/null +++ b/Semenova/src/test/java/Pages/EventsPage.java @@ -0,0 +1,42 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.List; + +public class EventsPage { + + private WebDriver driver; + + @FindBy(css = ".years-navigation li") + private List yearsFilter; + + @FindBy(css = ".years-navigation__months li") + private List monthFilter; + + @FindBy(css = ".news-list li .date") + private List searchResultsDates; + + public EventsPage (WebDriver driver) { + this.driver = driver; + } + + public void selectYearByPosition(int itemNumber){ + yearsFilter.get(itemNumber).click(); + } + + public void selectMonthByPosition(int itemNumber){ + monthFilter.get(itemNumber).click(); + } + + public String getDateOfResult(int itemNumber){ + return searchResultsDates.get(itemNumber).getText(); + } + + public int getResultsCount(){ + return searchResultsDates.size(); + } + +} diff --git a/Semenova/src/test/java/Pages/FeedbackPage.java b/Semenova/src/test/java/Pages/FeedbackPage.java new file mode 100644 index 0000000..ced6282 --- /dev/null +++ b/Semenova/src/test/java/Pages/FeedbackPage.java @@ -0,0 +1,49 @@ +package Pages; + +import org.openqa.selenium.By; +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; + + +public class FeedbackPage { + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(id = "email") + private WebElement emailInput; + + @FindBy(id = "text") + private WebElement textInput; + + @FindBy(id = "btnSubmit") + private WebElement btnSubmit; + + @FindBy(id = "output") + private WebElement output; + + public FeedbackPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public void insertEmail(String email){ + emailInput.sendKeys(email); + } + + public void insertText(String text){ + textInput.sendKeys(text); + } + + public void submitFeedback(){ + btnSubmit.click(); + } + + public String getOutput(){ + wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("output"))); + + return output.getText(); + } +} diff --git a/Semenova/src/test/java/Pages/ForShareholders.java b/Semenova/src/test/java/Pages/ForShareholders.java new file mode 100644 index 0000000..c4b026c --- /dev/null +++ b/Semenova/src/test/java/Pages/ForShareholders.java @@ -0,0 +1,32 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.List; + +public class ForShareholders { + private WebDriver driver; + + @FindBy(css = ".reports_cont .file a") + private List downloadLinks; + + @FindBy(css = ".subnavigation li") + private List subMenuElements; + + public ForShareholders(WebDriver driver) { + this.driver = driver; + } + + public String getFileName(int elementNumber){ + String fileName = downloadLinks.get(elementNumber).getAttribute("href"); + fileName = fileName.substring(fileName.lastIndexOf("/")+1); + return fileName; + } + + public void clickDownloadLink(int elementNumber){ + downloadLinks.get(elementNumber).click(); + } + +} diff --git a/Semenova/src/test/java/Pages/JournalsPage.java b/Semenova/src/test/java/Pages/JournalsPage.java new file mode 100644 index 0000000..3adb9c1 --- /dev/null +++ b/Semenova/src/test/java/Pages/JournalsPage.java @@ -0,0 +1,36 @@ +package Pages; + +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 JournalsPage { + + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".journals__img-link") + private List imgLinks; + + + public JournalsPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public void clickImgLink(int elementNumber){ + wait.until(ExpectedConditions.visibilityOfAllElements(imgLinks)); + imgLinks.get(elementNumber).click(); + } + + public String getFileName(int elementNumber){ + String fileName = imgLinks.get(elementNumber).getAttribute("href"); + fileName = fileName.substring(fileName.lastIndexOf("/")+1); + return fileName; + } + +} diff --git a/Semenova/src/test/java/Pages/MainPage.java b/Semenova/src/test/java/Pages/MainPage.java new file mode 100644 index 0000000..8e7f2a3 --- /dev/null +++ b/Semenova/src/test/java/Pages/MainPage.java @@ -0,0 +1,102 @@ +package Pages; + +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.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.List; + +public class MainPage { + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".navigation li") + private List menuElements; + + @FindBy(css = ".lay_button") + private WebElement layButton; + + @FindBy(css = ".menu-map__col a") + private List layMenuElements; + + @FindBy(id = "sites_link") + private WebElement externalSitesBtn; + + @FindBy(css = "#sites_list .column_wrapper a") + private List externalLinks; + + @FindBy(css = ".main_menu_search") + private WebElement searchBtn; + + @FindBy(id = "search-field__query") + private WebElement searchField; + + @FindBy(css = ".additional_top_navigation a") + private List additionalMenu; + + private static int shareholdersPageMenuElementNumber = 1; + private static int aboutPageMenuElementNumber = 0; + private static int pressPageMenuElementNumber = 2; + private static int purchasePageMenuElementNumber = 1; + private static int marketingPageMenuElementNumber = 3; + + public MainPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public void clickMenuElementShareholder(){ + wait.until(ExpectedConditions.visibilityOfAllElements(menuElements.get(shareholdersPageMenuElementNumber))); + menuElements.get(shareholdersPageMenuElementNumber).click(); + } + public void clickMenuElementAbout(){ + wait.until(ExpectedConditions.visibilityOfAllElements(menuElements.get(shareholdersPageMenuElementNumber))); + menuElements.get(aboutPageMenuElementNumber).click(); + } + public void clickMenuElementPress(){ + wait.until(ExpectedConditions.visibilityOfAllElements(menuElements.get(shareholdersPageMenuElementNumber))); + menuElements.get(pressPageMenuElementNumber).click(); + } + + public void clickLayButton(){ + layButton.click(); + } + public void clickMarketingLayMenuElement(){ + layMenuElements.get(marketingPageMenuElementNumber).click(); + } + + public void clickExternalSitesBtn(){ + externalSitesBtn.click(); + } + + public void clickExternalLink(int elementNumber) { + wait.until(ExpectedConditions.visibilityOfAllElements(externalLinks.get(elementNumber))); + externalLinks.get(elementNumber).click(); + } + + public String getTitleExternalLink(int elementNumber) { + wait.until(ExpectedConditions.visibilityOfAllElements(externalLinks.get(elementNumber))); + + return externalLinks.get(elementNumber).getText(); + } + + public void clickSearchBtn(){ + searchBtn.click(); + } + + public void insertSearchText(String text){ + wait.until(ExpectedConditions.visibilityOf(searchField)); + searchField.sendKeys(text); + } + + public void submitSearch(){ + searchField.sendKeys(Keys.RETURN); + } + + public void clickAdditionalMenuElementPurchase(){ + additionalMenu.get(purchasePageMenuElementNumber).click(); + } +} diff --git a/Semenova/src/test/java/Pages/MarketingPage.java b/Semenova/src/test/java/Pages/MarketingPage.java new file mode 100644 index 0000000..29635b7 --- /dev/null +++ b/Semenova/src/test/java/Pages/MarketingPage.java @@ -0,0 +1,21 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class MarketingPage { + private WebDriver driver; + + @FindBy(css = ".main-content") + private WebElement mainContentElement; + + + public MarketingPage(WebDriver driver) { + this.driver = driver; + } + + public boolean isMainContentPresent(){ + return mainContentElement.isDisplayed(); + } +} diff --git a/Semenova/src/test/java/Pages/MediaLib.java b/Semenova/src/test/java/Pages/MediaLib.java new file mode 100644 index 0000000..cae95a6 --- /dev/null +++ b/Semenova/src/test/java/Pages/MediaLib.java @@ -0,0 +1,97 @@ +package Pages; + +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 MediaLib { + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".media__list:first-child .media__item .media__date:first-child") + private List itemsDates; + + @FindBy(css = ".media__list:first-child .media__item .media__name a") + private List itemsTitles; + + @FindBy(css = ".media__list:first-child .media__item a:first-child") + private List itemsLinks; + + @FindBy(css = ".media__list:first-child .media__item a:first-child img") + private List albumsImages; + + @FindBy(css = ".content__filter a") + private List contentFilter; + + @FindBy(css = ".years-navigation__months li") + private List monthFilter; + + @FindBy(css = ".media__popup__social span") + private List socialLinks; + + @FindBy(css = ".h1--semi-margin-bottom") + private WebElement albumTitle; + + @FindBy(css = ".media__list ") + private WebElement mediaListElement; + + private static int socialLinkTwitter = 2; + + public MediaLib(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,10,500); + } + + public String getDateOfItem(int elementNumber){ + wait.until(ExpectedConditions.visibilityOfAllElements(itemsDates.get(elementNumber))); + return itemsDates.get(elementNumber).getAttribute("value"); + } + + public int getItemsCount(){ + return itemsDates.size(); + } + + public void clickItemImage(int elementNumber){ + wait.until(ExpectedConditions.visibilityOf( albumsImages.get(elementNumber))); + albumsImages.get(elementNumber).click(); + } + + public String getItemImageName(int elementNumber){ + wait.until(ExpectedConditions.visibilityOf(albumsImages.get(elementNumber))); + String preview = albumsImages.get(elementNumber).getAttribute("src"); + preview = preview.substring(preview.lastIndexOf("_")+1); + + return preview; + } + + public void clickVideoFilter() { + contentFilter.get(0).click(); + } + + public void clickItem(int elementNumber){ + itemsLinks.get(elementNumber).click(); + } + + public void selectMonthByPosition(int itemNumber){ + monthFilter.get(itemNumber).click(); + } + + public void clickSocialLinkTwitter(){ + socialLinks.get(socialLinkTwitter).click(); + } + + public void switchToTwitterPopup(){ + + for (String winHandle : driver.getWindowHandles()) { + driver.switchTo().window(winHandle); + } + } + + public boolean isMediaListPresent(){ + return mediaListElement.isDisplayed(); + } +} diff --git a/Semenova/src/test/java/Pages/MiningPage.java b/Semenova/src/test/java/Pages/MiningPage.java new file mode 100644 index 0000000..4357d89 --- /dev/null +++ b/Semenova/src/test/java/Pages/MiningPage.java @@ -0,0 +1,21 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class MiningPage { + private WebDriver driver; + + @FindBy(css = ".main-content") + private WebElement mainContentElement; + + + public MiningPage(WebDriver driver) { + this.driver = driver; + } + + public boolean isMainContentPresent(){ + return mainContentElement.isDisplayed(); + } +} diff --git a/Semenova/src/test/java/Pages/PressPage.java b/Semenova/src/test/java/Pages/PressPage.java new file mode 100644 index 0000000..4f41567 --- /dev/null +++ b/Semenova/src/test/java/Pages/PressPage.java @@ -0,0 +1,47 @@ +package Pages; + +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 PressPage { + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".subnavigation li") + private List menuElements; + + @FindBy(css = ".news-list") + private WebElement newsElement; + + private static int journalPageMenuElementNumber = 2; + private static int mediaPageMenuElementNumber = 1; + private static int eventPageMenuElementNumber = 0; + + public PressPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public void clickMenuElementJournal(){ + wait.until(ExpectedConditions.visibilityOfAllElements(menuElements)); + menuElements.get(journalPageMenuElementNumber).click(); + } + public void clickMenuElementEventPage(){ + wait.until(ExpectedConditions.visibilityOfAllElements(menuElements)); + menuElements.get(eventPageMenuElementNumber).click(); + } + public void clickMenuElementMedia(){ + wait.until(ExpectedConditions.visibilityOfAllElements(menuElements)); + menuElements.get(mediaPageMenuElementNumber).click(); + } + + public boolean isNewsPresent(){ + return newsElement.isDisplayed(); + } + +} diff --git a/Semenova/src/test/java/Pages/PurchasesPage.java b/Semenova/src/test/java/Pages/PurchasesPage.java new file mode 100644 index 0000000..8fc0092 --- /dev/null +++ b/Semenova/src/test/java/Pages/PurchasesPage.java @@ -0,0 +1,49 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.List; + +public class PurchasesPage { + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".subnavigation a") + private List menuElements; + + @FindBy(css = ".text_data tbody tr") + private List searchResults; + + @FindBy(css = ".text_data tbody tr td:nth-child(2) p:first-child span") + private List purchasesNumbers; + + @FindBy(css = ".dataTables_paginate span") + private List paginationElements; + + private static int feedbackMenuElementNumber = 10; + private static int inWorkPurchaseMenuElementNumber = 2; + + public PurchasesPage(WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public void clickMenuItemInWork(){ + menuElements.get(inWorkPurchaseMenuElementNumber).click(); + } + public void clickMenuItemFeedback(){ + menuElements.get(feedbackMenuElementNumber).click(); + } + + public void clickPage(int pageNumber){ + paginationElements.get(pageNumber).click(); + } + + public boolean isSelectedPage(int pageNumber){ + boolean isSelect = paginationElements.get(pageNumber).getAttribute("class").equals("paginate_active"); + return isSelect; + } +} diff --git a/Semenova/src/test/java/Pages/SearchResultsPage.java b/Semenova/src/test/java/Pages/SearchResultsPage.java new file mode 100644 index 0000000..0c6c5f7 --- /dev/null +++ b/Semenova/src/test/java/Pages/SearchResultsPage.java @@ -0,0 +1,55 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.List; + +public class SearchResultsPage { + + private WebDriverWait wait; + private WebDriver driver; + + @FindBy(css = ".search_results .search_results__item[data-ng-repeat='item in searchResults'] .search_results__date") + private List searchResultsDates; + + @FindBy(css = ".search_results .search_results__item[data-ng-repeat='item in searchResults'] .search_results__text") + private List searchResultsTexts; + + @FindBy(css = ".toggle span") + private WebElement filterOn; + + @FindBy(css = ".search__tags--years .tag-button") + private List yearsFilter; + + public SearchResultsPage (WebDriver driver) { + this.driver = driver; + wait = new WebDriverWait(driver,30,500); + } + + public String getItemsText(int itemNumber){ + + return searchResultsTexts.get(itemNumber).getText(); + } + + public String getItemsDate(int itemNumber){ + return searchResultsDates.get(itemNumber).getAttribute("value"); + } + + public int getItemsCount() { + int size = searchResultsTexts.size(); + return size; + + } + + public void setFilterOn(){ + filterOn.click(); + } + + public void selectYearByPosition(int itemNumber){ + yearsFilter.get(itemNumber).click(); + } + +} diff --git a/Semenova/src/test/java/Pages/SubsidiariesPage.java b/Semenova/src/test/java/Pages/SubsidiariesPage.java new file mode 100644 index 0000000..5685c08 --- /dev/null +++ b/Semenova/src/test/java/Pages/SubsidiariesPage.java @@ -0,0 +1,57 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.List; + +public class SubsidiariesPage { + private WebDriver driver; + + @FindBy(css = ".filters p *") + private List filtersLinks; + + @FindBy(css = ".company_list ul:nth-child(2) .gazprom_part") + private List itemsPercent100; + + @FindBy(css = ".company_list ul:nth-child(6) .gazprom_part") + private List itemsPercentMore50; + + @FindBy(css = ".company_list ul:nth-child(8) .gazprom_part") + private List itemsPercentLess50; + + public SubsidiariesPage(WebDriver driver) { + this.driver = driver; + } + + public void clickPercentFilter(){ + filtersLinks.get(1).click(); + } + + public int getItemsPercent100Count(){ + return itemsPercent100.size(); + } + + public int getItemsPercentMore50Count(){ + return itemsPercentMore50.size(); + } + public int getItemsPercentLess50Count(){ + return itemsPercentLess50.size(); + } + + public float getPartOfItemPercent100(int itemNumber){ + String per = itemsPercent100.get(itemNumber).getText().split("%")[0]; + return Float.parseFloat(per.substring(per.lastIndexOf(" ")+1).replace(",",".")); + } + + public float getPartOfItemPercentMore50(int itemNumber){ + String per = itemsPercentMore50.get(itemNumber).getText().split("%")[0]; + return Float.parseFloat(per.substring(per.lastIndexOf(" ")+1).replace(",",".")); + } + + public float getPartOfItemPercentLess50(int itemNumber){ + String per = itemsPercentLess50.get(itemNumber).getText().split("%")[0]; + return Float.parseFloat(per.substring(per.lastIndexOf(" ")+1).replace(",",".")); + } +} diff --git a/Semenova/src/test/java/Pages/TwitterSharingPopup.java b/Semenova/src/test/java/Pages/TwitterSharingPopup.java new file mode 100644 index 0000000..e0ed237 --- /dev/null +++ b/Semenova/src/test/java/Pages/TwitterSharingPopup.java @@ -0,0 +1,26 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +public class TwitterSharingPopup { + private WebDriver driver; + + @FindBy(id = "username_or_email") + private WebElement usernameInput; + + @FindBy(id = "password") + private WebElement passInput; + + @FindBy(css = ".submit") + private WebElement submitBtn; + + public TwitterSharingPopup(WebDriver driver) { + this.driver = driver; + } + + public boolean isSubmitBtnPresent(){ + return submitBtn.isDisplayed(); + } +} diff --git a/Semenova/src/test/java/Pages/VideoPage.java b/Semenova/src/test/java/Pages/VideoPage.java new file mode 100644 index 0000000..f8b86bb --- /dev/null +++ b/Semenova/src/test/java/Pages/VideoPage.java @@ -0,0 +1,33 @@ +package Pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.List; + +public class VideoPage { + + private WebDriver driver; + + @FindBy(css = ".media__list .media__item img") + private List albumImages; + + @FindBy(css = ".media__popup__thumbs .media__popup__thumb") + private List photosPopup; + + @FindBy(css = ".media_filter h1") + private WebElement videoTitle; + + @FindBy(css = ".media__iframe") + private WebElement videoElement; + + public VideoPage(WebDriver driver) { + this.driver = driver; + } + + public boolean isVideoPresent(){ + return videoElement.isDisplayed(); + } + +} diff --git a/Semenova/src/test/java/context/ChromeContext.java b/Semenova/src/test/java/context/ChromeContext.java new file mode 100644 index 0000000..90121c2 --- /dev/null +++ b/Semenova/src/test/java/context/ChromeContext.java @@ -0,0 +1,39 @@ +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); + prefs.put("plugins.always_open_pdf_externally", true); + + options.setExperimentalOption("prefs",prefs); + driver = new ChromeDriver(options); + } + + @Override + protected String getDriverExecutable(boolean isWindows) { + return isWindows ? WINDOWS_DRIVER : LINUX_DRIVER; + } + + @Override + protected String getDriverType() { + return DRIVER_TYPE; + } + +} diff --git a/Semenova/src/test/java/context/Context.java b/Semenova/src/test/java/context/Context.java new file mode 100644 index 0000000..91892fb --- /dev/null +++ b/Semenova/src/test/java/context/Context.java @@ -0,0 +1,50 @@ +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; + } +}