diff --git a/README.md b/README.md index 8326355..74aff3f 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,3 @@ -Изменён pom файл для отображения allure отчётов. -Успешно собирается в allure-reports/ - -Добавлена возможность скриншотов по шагам -``` -AllureUtils.attachScreenshot() -``` - -а также при ошибках - -```@Rule -public MyAllureListener allureListener = new MyAllureListener(); -``` - - -``` -public class MyAllureListener extends TestWatcher { - - @Override - protected void failed(Throwable e, Description description) { - takeScreenshot(); - } - - @Attachment(value = "Screenshot on failure", type = "image/png") - public byte[] takeScreenshot() { - return ((TakesScreenshot) DriverManager.getDriverManager().getDriver()) - .getScreenshotAs(OutputType.BYTES); - } -} -``` - -![img.png](img.png) +Изменён pom файл для поддержки cucumber, добавлен cucumberScenario.feature, класс BusinessTripSteps +![img_1.png](img_1.png) diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000..59ed76d Binary files /dev/null and b/img_1.png differ diff --git a/pom.xml b/pom.xml index c45d3d0..1243821 100644 --- a/pom.xml +++ b/pom.xml @@ -1,22 +1,34 @@ - + 4.0.0 + ru.ibs sel1 1.0-SNAPSHOT Archetype - sel1 https://git.goodtester.ru + + 8 + 8 + UTF-8 + 1.9.7 + 2.13.5 + 7.15.0 + + - + org.seleniumhq.selenium selenium-java 4.33.0 - + junit junit @@ -24,35 +36,58 @@ test + - io.qameta.allure - allure-junit4 - 2.13.5 + io.cucumber + cucumber-java + ${cucumber.version} + + io.cucumber + cucumber-junit + ${cucumber.version} + + + + + io.qameta.allure + allure-junit4 + ${allure.version} + + + + io.qameta.allure + allure-cucumber7-jvm + 2.25.0 + + + org.aspectj aspectjweaver - 1.9.7 + ${aspectj.version} + org.apache.maven.plugins maven-compiler-plugin 3.8.1 - 8 - 8 - UTF-8 + ${maven.compiler.source} + ${maven.compiler.target} + ${encoding} + true - + org.apache.maven.plugins maven-surefire-plugin @@ -60,30 +95,19 @@ true - -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.7/aspectjweaver-1.9.7.jar" + -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" ${project.build.directory}/allure-results - - - listener - io.qameta.allure.junit4.AllureJunit4 - - + + - - - - org.aspectj - aspectjweaver - 1.9.7 - - - - + io.qameta.allure allure-maven @@ -103,9 +127,7 @@ + - - - diff --git a/src/test/java/ru/ibs/framework/CucumberRunner.java b/src/test/java/ru/ibs/framework/CucumberRunner.java new file mode 100644 index 0000000..e6f3a90 --- /dev/null +++ b/src/test/java/ru/ibs/framework/CucumberRunner.java @@ -0,0 +1,14 @@ +package ru.ibs.framework; + +import io.cucumber.junit.Cucumber; +import io.cucumber.junit.CucumberOptions; +import org.junit.runner.RunWith; + +@RunWith(Cucumber.class) +@CucumberOptions( + features = "src/test/resources/features", + glue = "ru.ibs.tests", + plugin = {"pretty", "io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"}, + snippets = CucumberOptions.SnippetType.CAMELCASE +) +public class CucumberRunner {} \ No newline at end of file diff --git a/src/test/java/ru/ibs/tests/ApplineBusinessTripTest.java b/src/test/java/ru/ibs/tests/ApplineBusinessTripTest.java deleted file mode 100644 index 2d67a06..0000000 --- a/src/test/java/ru/ibs/tests/ApplineBusinessTripTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package ru.ibs.tests; - -import org.junit.*; -import org.openqa.selenium.By; -import ru.ibs.framework.managers.DriverManager; -import ru.ibs.framework.utils.AllureUtils; -import ru.ibs.framework.utils.MyAllureListener; - -public class ApplineBusinessTripTest extends BaseTests { - - private LoginPage loginPage; - private DashboardPage dashboardPage; - private BusinessTripPage businessTripPage; - - @Rule - public MyAllureListener allureListener = new MyAllureListener(); - - @Before - public void setUp() { - // Получаем драйвер из DriverManager (инициализирован в BaseTests) - loginPage = new LoginPage(DriverManager.getDriverManager().getDriver()); - - // Открываем страницу логина - DriverManager.getDriverManager().getDriver().get("http://training.appline.ru/user/login"); - } - - @Test - public void applineLoginScenario() { - AllureUtils.attachScreenshot(); - dashboardPage = loginPage.login("Irina Filippova", "testing"); - Assert.assertTrue("Dashboard not loaded", dashboardPage.isDashboardLoaded()); - - businessTripPage = dashboardPage.goToBusinessTrip(); - Assert.assertTrue("Trips page not loaded", businessTripPage.isTripsPageLoaded()); - - businessTripPage.openCreateTripForm(); - - businessTripPage.selectDepartment("Отдел внутренней разработки"); - businessTripPage.selectOrganization("Edge"); - businessTripPage.setTicketsCheckbox(true); - businessTripPage.fillCity("Дмитров"); - - AllureUtils.attachScreenshot(); - - businessTripPage.fillDate( - By.xpath("//input[@placeholder='Укажите дату' and contains(@id, 'departureDatePlan')]"), - "01.01.2025" - ); - - businessTripPage.fillDate( - By.xpath("//input[@placeholder='Укажите дату' and contains(@id, 'returnDatePlan')]"), - "10.01.2025" - ); - - AllureUtils.attachScreenshot(); - - businessTripPage.saveAndClose(); - - Assert.assertTrue("Expected validation error not shown", - businessTripPage.isErrorDisplayed("Список командируемых сотрудников не может быть пустым")); - } - -} diff --git a/src/test/java/ru/ibs/tests/BusinessTripSteps.java b/src/test/java/ru/ibs/tests/BusinessTripSteps.java new file mode 100644 index 0000000..1b99cbc --- /dev/null +++ b/src/test/java/ru/ibs/tests/BusinessTripSteps.java @@ -0,0 +1,91 @@ +package ru.ibs.tests; + +import io.cucumber.java.ru.*; +import static org.junit.Assert.*; + +import io.cucumber.java.After; +import org.openqa.selenium.By; +import ru.ibs.framework.managers.DriverManager; +import ru.ibs.tests.*; + +public class BusinessTripSteps { + + private final LoginPage loginPage = new LoginPage(DriverManager.getDriverManager().getDriver()); + private DashboardPage dashboardPage; + private BusinessTripPage businessTripPage; + + @Дано("Открываем страницу логина") + public void openLoginPage() { + DriverManager.getDriverManager().getDriver().get("http://training.appline.ru/user/login"); + } + + @И("Вводим логин {string} и пароль {string}") + public void login(String username, String password) { + dashboardPage = loginPage.login(username, password); + } + + @И("Проверяем, что панель быстрого запуска загружена") + public void dashboardLoaded() { + assertTrue("Dashboard not loaded", dashboardPage.isDashboardLoaded()); + } + + @И("Переходим в раздел {string}") + public void goToBusinessTrip(String name) { + businessTripPage = dashboardPage.goToBusinessTrip(); + } + + @И("Проверяем, что страница {string} загружена") + public void tripsPageLoaded(String title) { + assertTrue("Trips page not loaded", businessTripPage.isTripsPageLoaded()); + } + + @И("Нажимаем на кнопку создания новой командировки") + public void openCreateTripForm() { + businessTripPage.openCreateTripForm(); + } + + @И("Выбираем подразделение {string}") + public void selectDepartment(String department) { + businessTripPage.selectDepartment(department); + } + + @И("Выбираем организацию {string}") + public void selectOrganization(String organization) { + businessTripPage.selectOrganization(organization); + } + + @И("Устанавливаем чекбокс {string} в положение {string}") + public void setCheckbox(String checkboxName, String value) { + boolean checked = Boolean.parseBoolean(value); + businessTripPage.setTicketsCheckbox(checked); + } + + @И("Заполняем поле {string} значением {string}") + public void fillCityOrDate(String field, String value) { + if (field.equalsIgnoreCase("Город")) { + businessTripPage.fillCity(value); + } else if (field.equalsIgnoreCase("Дата отправления")) { + businessTripPage.fillDate(By.xpath("//input[@placeholder='Укажите дату' and contains(@id, 'departureDatePlan')]"), value); + } else if (field.equalsIgnoreCase("Дата возвращения")) { + businessTripPage.fillDate(By.xpath("//input[@placeholder='Укажите дату' and contains(@id, 'returnDatePlan')]"), value); + } + } + + @И("Нажимаем кнопку {string}") + public void clickButton(String buttonName) { + if (buttonName.equals("Сохранить и закрыть")) { + businessTripPage.saveAndClose(); + } + } + + @Тогда("Проверяем, что отображается ошибка {string}") + public void checkError(String errorText) { + assertTrue("Expected validation error not shown", + businessTripPage.isErrorDisplayed(errorText)); + } + + @After + public void tearDown() { + DriverManager.getDriverManager().quitDriver(); + } +} diff --git a/src/test/resources/features/cucumberScenario.feature b/src/test/resources/features/cucumberScenario.feature new file mode 100644 index 0000000..5d544a3 --- /dev/null +++ b/src/test/resources/features/cucumberScenario.feature @@ -0,0 +1,19 @@ +# language: ru +@businessTrip +Функционал: Создание командировки + + Сценарий: Проверка ошибки при попытке создать командировку без сотрудников + * Открываем страницу логина + * Вводим логин "Irina Filippova" и пароль "testing" + * Проверяем, что панель быстрого запуска загружена + * Переходим в раздел "Командировки" + * Проверяем, что страница "Командировки" загружена + * Нажимаем на кнопку создания новой командировки + * Выбираем подразделение "Отдел внутренней разработки" + * Выбираем организацию "Edge" + * Устанавливаем чекбокс "Заказ билетов" в положение "true" + * Заполняем поле "Город" значением "Дмитров" + * Заполняем поле "Дата отправления" значением "01.01.2025" + * Заполняем поле "Дата возвращения" значением "10.01.2025" + * Нажимаем кнопку "Сохранить и закрыть" + * Проверяем, что отображается ошибка "Список командируемых сотрудников не может быть пустым"