Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions proJect/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,36 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version> <!-- или последняя стабильная версия -->
<version>5.10.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.2</version>
<scope>test</scope>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>LATEST</version>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.9.2</version>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.9.0</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.9.0</version>
<scope>compile</scope>
</dependency>
</dependencies>



</project>
5 changes: 5 additions & 0 deletions proJect/src/main/java/anlov/java/Attribute.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package anlov.java;

public enum Attribute {
innerText,
}
36 changes: 36 additions & 0 deletions proJect/src/main/java/anlov/java/CommonActions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package anlov.java;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;

import java.time.Duration;


public class CommonActions {
public static WebDriver createDriver() {
WebDriver driver = null;
switch (Config.BROWSER) {
case "win_chrome":
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
break;
case "win_firefox":
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
break;
case "win_edge":
WebDriverManager.edgedriver().setup();
driver = new EdgeDriver();
break;
default:
Assert.fail("Wrong browser's name:" + Config.BROWSER);
}
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(Constants.TimeoutVariable.IMPLICIT_WAIT));
return driver;
}
}
8 changes: 8 additions & 0 deletions proJect/src/main/java/anlov/java/Config.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package anlov.java;

public class Config {

public static final String BROWSER = "win_chrome";
public static final boolean CLEAR_COOKIES = true;
public static final boolean QUIT_BROWSER = true;
}
13 changes: 13 additions & 0 deletions proJect/src/main/java/anlov/java/Constants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package anlov.java;

public class Constants {
public static class TimeoutVariable {
public static final int IMPLICIT_WAIT = 5;
public static final int EXPLICIT_WAIT = 10;
}

public static class UrlPage {
public static final String WILDBERRIES_HOME = "https://www.wildberries.ru/";
}

}
15 changes: 0 additions & 15 deletions proJect/src/main/java/anlov/java/Factorial.java

This file was deleted.

2 changes: 1 addition & 1 deletion proJect/src/main/java/anlov/java/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@

public class Main {
public static void main(String[] args) {
System.out.println(Factorial.getFactorial(3));
System.out.println(123);
}
}
24 changes: 24 additions & 0 deletions proJect/src/main/java/anlov/java/pages/BaseElement.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package anlov.java.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;


public class BaseElement {

protected WebDriver driver;

public BaseElement(WebDriver driver) {
this.driver = driver;
}

public static class Basket {
private static final By basketLoc = By
.xpath("//div[@id='basketContent']/.//a[@href='/lk/basket']");
}

public BaseElement clickBasket() {
driver.findElement(Basket.basketLoc).click();
return this;
}
}
34 changes: 34 additions & 0 deletions proJect/src/main/java/anlov/java/pages/BasePage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package anlov.java.pages;

import anlov.java.Attribute;
import anlov.java.Constants;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class BasePage {
protected WebDriver driver;

public BasePage(WebDriver driver) {
this.driver = driver;
}

public void openPage(String url) {
driver.get(url);
}

public WebElement waitElementVisible(WebElement element) {
new WebDriverWait(driver, Duration.ofSeconds(Constants.TimeoutVariable.IMPLICIT_WAIT))
.until(ExpectedConditions.visibilityOf(element));
return element;
}

public WebElement waitAttribute(WebElement element, Attribute attribute, String str) {
new WebDriverWait(driver, Duration.ofSeconds(Constants.TimeoutVariable.EXPLICIT_WAIT))
.until(ExpectedConditions.attributeToBe(element, attribute.toString(), str));
return element;
}
}
65 changes: 65 additions & 0 deletions proJect/src/main/java/anlov/java/pages/BasketPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package anlov.java.pages;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.util.List;
import java.util.stream.Collectors;

public class BasketPage extends BasePage{
private List<String> goodsOfBucket;
private List<String> pricesOfBucketGoods;
private static class Result {
private static final By summa = By.xpath("//span[text()='Итого']/following-sibling::span/span");
}

public BasketPage(WebDriver driver) {
super(driver);
}

private static class Good {
private static final By goodName = By.xpath("//span[@class='good-info__good-name']");
private static final By goodPrice = By.xpath("//div[@class='list-item__price-new wallet']");
}

public void nameOfGoods() {
goodsOfBucket = driver.findElements(Good.goodName).stream()
.map(WebElement::getText).collect(Collectors.toList());
pricesOfBucketGoods = driver.findElements(Good.goodPrice).stream()
.map(p -> p.getText().split("₽")[0].replaceAll("\\s", ""))
.collect(Collectors.toList());
}

public double getGoodsPrice(int index) {
if (pricesOfBucketGoods == null || pricesOfBucketGoods.isEmpty()) {
throw new RuntimeException("Список цен в корзине пустой! Проверьте, что товары добавлены в корзину");
}
if (index < 0 || index >= pricesOfBucketGoods.size()) {
throw new RuntimeException("Индекс " + index + " выходит за границы списка цен. Размер списка: " + pricesOfBucketGoods.size());
}
return Double.parseDouble(pricesOfBucketGoods.get(index));
}

public int getCountOfGoods() {
return goodsOfBucket.size();
}

public String getGoodsName(int index) {
return goodsOfBucket.get(index);
}

public double getSum() {
return Double.parseDouble(driver.findElement(Result.summa)
.getText().split("₽")[0].replaceAll("\\s", ""));
}

public BasketPage wait(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return this;
}
}
77 changes: 77 additions & 0 deletions proJect/src/main/java/anlov/java/pages/HomePage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package anlov.java.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import anlov.java.Attribute;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;

public class HomePage extends BasePage {
private List<String> selectGoods;
private List<String> selectPrices;

public HomePage(WebDriver driver) {
super(driver);
}

private static class Goods {
private static final By lowerPrice = By.xpath("//span/ins");
private static final By productName = By.xpath("//span[@class ='product-card__name']");
private static final By addToBasket = By.xpath("//article//a[@href='/lk/basket']");
}

private static class Size {
private static final By checkSize = By.xpath("//li/label");
}

public HomePage addToBasket(int num) {
List<WebElement> productNames = driver.findElements(Goods.productName);
selectGoods = productNames.stream().limit(num).map(p -> p.getAttribute(Attribute.innerText.toString())
.split("/")[1].trim()).collect(Collectors.toList());
List<WebElement> lowerPrices = driver.findElements(Goods.lowerPrice);
selectPrices = lowerPrices.stream().limit(num).map(p -> p.getText().split("₽")[0]
.replaceAll("\\s", "")).collect(Collectors.toList());

driver.findElements(Goods.addToBasket).stream().limit(num).forEach(this::checkForSize);
return this;
}

private void checkForSize(WebElement element) {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
element.click();
try {
WebElement sizeElement = wait.until(
ExpectedConditions.elementToBeClickable(Size.checkSize)
);
sizeElement.click();
} catch (TimeoutException e) {
System.out.println("Окно выбора размера не появилось, товар добавлен без выбора размера");
}
catch (NoSuchElementException ignored) {
System.out.println("Элемент размера не найден");
}
}

public Double getSelectedGoodsPrice(int index) {
return Double.parseDouble(selectPrices.get(index));
}

public double getSumOfGoods() {
return selectPrices.stream().mapToDouble(Double::parseDouble).sum();
}

public int getCountOfGoods() {
return selectGoods.size();
}

public String getSelectedGoodsName(int index) {
return selectGoods.get(index);
}
}
27 changes: 27 additions & 0 deletions proJect/src/test/java/BaseTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import anlov.java.CommonActions;
import anlov.java.Config;
import anlov.java.pages.BaseElement;
import anlov.java.pages.BasePage;
import anlov.java.pages.BasketPage;
import anlov.java.pages.HomePage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterSuite;
import org.testng.asserts.SoftAssert;

public class BaseTest {
protected static WebDriver driver = CommonActions.createDriver();
protected BasePage basePage = PageFactory.initElements(driver, BasePage.class);
protected HomePage homePage = PageFactory.initElements(driver, HomePage.class);
protected BasketPage basketPage = PageFactory.initElements(driver, BasketPage.class);
protected BaseElement baseElement = PageFactory.initElements(driver, BaseElement.class);

protected SoftAssert softAssert = new SoftAssert();

@AfterSuite(alwaysRun = true)
public void quit() {
if (Config.QUIT_BROWSER) {
driver.quit();
}
}
}
Loading