add fixes
This commit is contained in:
parent
dc40c051b2
commit
62917e9ee1
@ -13,13 +13,4 @@ public enum Category {
|
||||
public String getSelector() {
|
||||
return selector;
|
||||
}
|
||||
|
||||
public static Category findByName(String name) {
|
||||
for (Category value : values()) {
|
||||
if (name.equalsIgnoreCase(value.name())) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(String.format("Unknown category %s", name));
|
||||
}
|
||||
}
|
||||
|
@ -13,13 +13,4 @@ public enum Sort {
|
||||
public String getSelector() {
|
||||
return selector;
|
||||
}
|
||||
|
||||
public static Sort findByName(String name) {
|
||||
for (Sort value : values()) {
|
||||
if (name.equalsIgnoreCase(value.name())) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(String.format("Unknown sort type %s", name));
|
||||
}
|
||||
}
|
||||
|
@ -23,14 +23,19 @@ public class HomePage {
|
||||
private Waiters waiters;
|
||||
|
||||
/**
|
||||
* Конструктор класса HomePage, который инициализирует драйвер WebDriver и объект Waiters.
|
||||
* Конструктор используется для создания экземпляра класса HomePage, который представляет
|
||||
* домашнюю страницу веб-сайта и предоставляет методы для взаимодействия с элементами на этой странице.
|
||||
* Конструктор класса HomePage, который инициализирует драйвер WebDriver и
|
||||
* объект Waiters.
|
||||
* Конструктор используется для создания экземпляра класса HomePage, который
|
||||
* представляет
|
||||
* домашнюю страницу веб-сайта и предоставляет методы для взаимодействия с
|
||||
* элементами на этой странице.
|
||||
*
|
||||
* @param driver экземпляр WebDriver, используемый для взаимодействия с веб-страницей.
|
||||
* @param driver экземпляр WebDriver, используемый для взаимодействия с
|
||||
* веб-страницей.
|
||||
*/
|
||||
public HomePage(WebDriver driver) {
|
||||
// Инициализация драйвера WebDriver для использования в текущем экземпляре класса
|
||||
// Инициализация драйвера WebDriver для использования в текущем экземпляре
|
||||
// класса
|
||||
this.driver = driver;
|
||||
// Создание нового объекта Waiters с переданным драйвером для ожидания элементов
|
||||
this.waiters = new Waiters(driver);
|
||||
@ -38,19 +43,21 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Метод для перехода на главную страницу сайта Avito, используя WebDriver.
|
||||
* Метод выполняет переход на указанный URL, который соответствует странице с объявлениями о транспортных средствах в Пензе.
|
||||
* Метод выполняет переход на указанный URL, который соответствует странице с
|
||||
* объявлениями о транспортных средствах в Пензе.
|
||||
*
|
||||
*/
|
||||
|
||||
@Step("Переход на главную страницу")
|
||||
public void openAvito() {
|
||||
public void openAvito(String url) {
|
||||
// Переход на указанный URL с помощью WebDriver
|
||||
driver.get("https://www.avito.ru/penza/transport?cd=1");
|
||||
driver.get(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Выбор категории "Оргтехника и расходники" в пользовательском интерфейсе.
|
||||
* Метод выполняет последовательность действий для выбора категории и подкатегории.
|
||||
* Метод выполняет последовательность действий для выбора категории и
|
||||
* подкатегории.
|
||||
*/
|
||||
|
||||
@Step("Выбор категории 'Оргтехника и расходники'")
|
||||
@ -79,7 +86,8 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Метод для ввода запроса "Принтер" в поле поиска на веб-странице.
|
||||
* Метод выполняет последовательность действий, включая ожидание доступности поля поиска,
|
||||
* Метод выполняет последовательность действий, включая ожидание доступности
|
||||
* поля поиска,
|
||||
* ввод запроса и подтверждение ввода с помощью клавиши Enter.
|
||||
*/
|
||||
|
||||
@ -99,7 +107,8 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Метод для активации чекбокса "Новые" на веб-странице.
|
||||
* Метод выполняет последовательность действий, включая ожидание доступности чекбокса и его активацию.
|
||||
* Метод выполняет последовательность действий, включая ожидание доступности
|
||||
* чекбокса и его активацию.
|
||||
*/
|
||||
|
||||
@Step("Активировать чекбокс “Новые”")
|
||||
@ -115,14 +124,17 @@ public class HomePage {
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод для автоматизации действия по открытию выпадающего списка регионов на странице.
|
||||
* Метод для автоматизации действия по открытию выпадающего списка регионов на
|
||||
* странице.
|
||||
*/
|
||||
|
||||
@Step("Кликнуть по выпадающему списку регионов")
|
||||
public void openLocationChooser() {
|
||||
// Определение селектора для элемента, представляющего выпадающий список регионов
|
||||
// Определение селектора для элемента, представляющего выпадающий список
|
||||
// регионов
|
||||
final var changeLocationSelector = "[data-marker='search-form/change-location']";
|
||||
// Ожидание, пока элемент станет кликабельным, чтобы избежать ошибок при попытке клика
|
||||
// Ожидание, пока элемент станет кликабельным, чтобы избежать ошибок при попытке
|
||||
// клика
|
||||
waiters.waitForElementToBeClickable(changeLocationSelector);
|
||||
// Нахождение элемента по селектору и выполнение клика по нему
|
||||
driver.findElement(By.cssSelector(changeLocationSelector)).click();
|
||||
@ -130,7 +142,8 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Вводит регион "Владивосток" в соответствующее поле на странице.
|
||||
* Метод автоматизирует процесс ввода региона "Владивосток" в поле поиска региона на странице,
|
||||
* Метод автоматизирует процесс ввода региона "Владивосток" в поле поиска
|
||||
* региона на странице,
|
||||
* включая очистку поля, ввод нового значения и выбор предложенного варианта.
|
||||
*/
|
||||
|
||||
@ -178,7 +191,8 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Нажимает на кнопку "Показать n объявлений" на странице.
|
||||
* Метод автоматизирует действие пользователя по нажатию на кнопку "Показать n объявлений".
|
||||
* Метод автоматизирует действие пользователя по нажатию на кнопку "Показать n
|
||||
* объявлений".
|
||||
*/
|
||||
|
||||
@Step("Нажать на кнопку “Показать n объявлений”")
|
||||
@ -193,7 +207,8 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Выбирает "Дороже" в выпадающем списке сортировки на странице.
|
||||
* Метод автоматизирует процесс выбора опции "Дороже" в выпадающем списке сортировки,
|
||||
* Метод автоматизирует процесс выбора опции "Дороже" в выпадающем списке
|
||||
* сортировки,
|
||||
* что позволяет сортировать объявления по цене в порядке убывания.
|
||||
*/
|
||||
|
||||
@ -213,7 +228,8 @@ public class HomePage {
|
||||
|
||||
/**
|
||||
* Выводит в консоль значение цены первых 5 товаров на странице.
|
||||
* Данный метод автоматизирует процесс вывода в консоль значений цен первых 5 товаров.
|
||||
* Данный метод автоматизирует процесс вывода в консоль значений цен первых 5
|
||||
* товаров.
|
||||
*/
|
||||
|
||||
@Step("Вывести в консоль Значение цены первых 5 товаров")
|
||||
|
@ -27,6 +27,7 @@ public class Waiters {
|
||||
public void waitInputValueToBe(String cssSelector, String text) {
|
||||
wait.until(ExpectedConditions.textToBePresentInElementValue(By.cssSelector(cssSelector), text));
|
||||
}
|
||||
|
||||
public void waitTextStartsWith(String cssSelector, String text) {
|
||||
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(cssSelector), text));
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
package org.example;
|
||||
|
||||
import org.example.page.HomePage;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
@ -25,7 +26,7 @@ public class AvitoTest extends BaseTest {
|
||||
@Description("My homework Avito test")
|
||||
@Story("Search printers in Vladivostok")
|
||||
public void testAvitoSearch() {
|
||||
homePage.openAvito();
|
||||
homePage.openAvito("https://www.avito.ru/penza/transport?cd=1");
|
||||
homePage.makeScreenshot();
|
||||
homePage.selectCategory("26223");
|
||||
homePage.makeScreenshot();
|
||||
|
@ -1,4 +1,6 @@
|
||||
package org.example;
|
||||
import java.time.Duration;
|
||||
|
||||
import org.aeonbits.owner.ConfigFactory;
|
||||
import org.example.config.BaseCofig;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
@ -37,6 +39,7 @@ public abstract class BaseTest {
|
||||
//открытие страницы Google по url
|
||||
driver.get(config.url());
|
||||
|
||||
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
|
||||
//разворот окна на полный экран при открытии
|
||||
driver.manage().window().maximize();
|
||||
}
|
||||
|
@ -1,11 +1,7 @@
|
||||
package org.example.cucumber;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import io.cucumber.testng.AbstractTestNGCucumberTests;
|
||||
import io.cucumber.testng.CucumberOptions;
|
||||
import io.cucumber.testng.FeatureWrapper;
|
||||
import io.cucumber.testng.PickleWrapper;
|
||||
|
||||
@CucumberOptions(
|
||||
// папка, где хранится наша фича.
|
||||
@ -13,11 +9,6 @@ import io.cucumber.testng.PickleWrapper;
|
||||
// папка, где находятся наши стэпы (шаги).
|
||||
glue = "org/example/cucumber/steps",
|
||||
// задаём тип отчёта. Как именно он будет выглядеть.
|
||||
plugin = {"pretty"}
|
||||
)
|
||||
plugin = { "pretty" })
|
||||
public class RunCucumberTest extends AbstractTestNGCucumberTests {
|
||||
@Test(groups = "cucumber", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
|
||||
public void runScenario(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) {
|
||||
super.runScenario(pickleWrapper, featureWrapper);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package org.example.cucumber.steps;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.aeonbits.owner.ConfigFactory;
|
||||
import org.example.config.BaseCofig;
|
||||
import org.example.enums.Category;
|
||||
@ -9,6 +11,7 @@ import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
|
||||
import io.cucumber.java.After;
|
||||
import io.cucumber.java.ParameterType;
|
||||
import io.cucumber.java.en.And;
|
||||
import io.cucumber.java.en.Given;
|
||||
import io.cucumber.java.en.Then;
|
||||
@ -21,25 +24,36 @@ public class MyStepdefs {
|
||||
|
||||
private HomePage homePage;
|
||||
|
||||
@ParameterType(".*")
|
||||
public Category category(String category) {
|
||||
return Category.valueOf(category);
|
||||
}
|
||||
|
||||
@ParameterType(".*")
|
||||
public Sort sort(String sort) {
|
||||
return Sort.valueOf(sort);
|
||||
}
|
||||
|
||||
@Given("I am on the Avito homepage")
|
||||
public void iAmOnTheAvitoHomepage() {
|
||||
System.setProperty(config.driverProperty(), config.driverPath());
|
||||
driver = new ChromeDriver();
|
||||
driver.get(config.url());
|
||||
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
|
||||
driver.manage().window().maximize();
|
||||
|
||||
homePage = new HomePage(driver);
|
||||
homePage.openAvito();
|
||||
homePage.openAvito("https://www.avito.ru/");
|
||||
}
|
||||
|
||||
@When("I select category {string}")
|
||||
public void iSelectCategory(String category) {
|
||||
homePage.selectCategory(Category.findByName(category).getSelector());
|
||||
@When("I select category {category}")
|
||||
public void iSelectCategory(Category category) {
|
||||
homePage.selectCategory(category.getSelector());
|
||||
}
|
||||
|
||||
@And("I enter {string} in the search field")
|
||||
public void iEnterInTheSearchField(String searchString) {
|
||||
homePage.setSearchQuery(searchString);
|
||||
public void iEnterInTheSearchField(String query) {
|
||||
homePage.setSearchQuery(query);
|
||||
}
|
||||
|
||||
@And("I click on the regions dropdown")
|
||||
@ -48,8 +62,8 @@ public class MyStepdefs {
|
||||
}
|
||||
|
||||
@And("I enter {string} in the region field")
|
||||
public void iEnterInTheRegionField(String location) {
|
||||
homePage.setLocation(location);
|
||||
public void iEnterInTheRegionField(String city) {
|
||||
homePage.setLocation(city);
|
||||
}
|
||||
|
||||
@And("I click on the 'Show n ads' button")
|
||||
@ -62,14 +76,14 @@ public class MyStepdefs {
|
||||
homePage.setOnlyNew();
|
||||
}
|
||||
|
||||
@And("I select {string} in the sorting dropdown")
|
||||
public void iSelectInTheSortingDropdown(String sortType) {
|
||||
homePage.sort(Sort.findByName(sortType).getSelector());
|
||||
@And("I select {sort} in the sorting dropdown")
|
||||
public void iSelectInTheSortingDropdown(Sort sort) {
|
||||
homePage.sort(sort.getSelector());
|
||||
}
|
||||
|
||||
@Then("I should see the prices of the first {string} items in the console")
|
||||
public void iShouldSeeThePricesOfTheFirstItemsInTheConsole(String quantity) {
|
||||
homePage.printPrice(Integer.parseInt(quantity));
|
||||
@Then("I should see the prices of the first {int} items in the console")
|
||||
public void iShouldSeeThePricesOfTheFirstItemsInTheConsole(int quantity) {
|
||||
homePage.printPrice(quantity);
|
||||
}
|
||||
|
||||
@After
|
||||
|
@ -2,16 +2,16 @@ Feature: Avito search
|
||||
|
||||
Scenario Outline: Search for items
|
||||
Given I am on the Avito homepage
|
||||
When I select category "<category>"
|
||||
And I enter "<StringForSearch>" in the search field
|
||||
When I select category <category>
|
||||
And I enter "<query>" in the search field
|
||||
And I click on the regions dropdown
|
||||
And I enter "<city>" in the region field
|
||||
And I click on the 'Show n ads' button
|
||||
And I activate the 'Only with photos' checkbox
|
||||
And I select "<sort>" in the sorting dropdown
|
||||
Then I should see the prices of the first "<quantity>" items in the console
|
||||
And I select <sort> in the sorting dropdown
|
||||
Then I should see the prices of the first <quantity> items in the console
|
||||
|
||||
Examples:
|
||||
| category | StringForSearch | city | sort | quantity |
|
||||
| category | query | city | sort | quantity |
|
||||
| PRINTERS | принтер | Владивосток | PRICE_HIGH_TO_LOW | 10 |
|
||||
| MONITORS | монитор | Иркутск | PRICE_LOW_TO_HIGH | 7 |
|
||||
|
Loading…
Reference in New Issue
Block a user