diff --git a/.gitignore b/.gitignore
index 5d808cd..74b6467 100644
Binary files a/.gitignore and b/.gitignore differ
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8326355
--- /dev/null
+++ b/README.md
@@ -0,0 +1,33 @@
+Изменён 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);
+ }
+}
+```
+
+
+
diff --git a/img.png b/img.png
new file mode 100644
index 0000000..a786e2c
Binary files /dev/null and b/img.png differ
diff --git a/pom.xml b/pom.xml
index 9adfd42..c45d3d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,88 @@
test
+
+ io.qameta.allure
+ allure-junit4
+ 2.13.5
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.7
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M5
+
+ true
+
+ -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.7/aspectjweaver-1.9.7.jar"
+
+
+ ${project.build.directory}/allure-results
+
+
+
+ listener
+ io.qameta.allure.junit4.AllureJunit4
+
+
+
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.7
+
+
+
+
+
+
+
+ io.qameta.allure
+ allure-maven
+ 2.10.0
+
+ 2.10.0
+ ${project.build.directory}/allure-results
+ ${project.build.directory}/allure-report
+
+
+
+ report
+ verify
+
+ report
+
+
+
+
+
+
+
+
diff --git a/src/test/java/ru/ibs/framework/managers/TestPropManager.java b/src/test/java/ru/ibs/framework/managers/TestPropManager.java
index bf482c6..2827770 100644
--- a/src/test/java/ru/ibs/framework/managers/TestPropManager.java
+++ b/src/test/java/ru/ibs/framework/managers/TestPropManager.java
@@ -12,7 +12,7 @@ public class TestPropManager {
try (FileInputStream fis = new FileInputStream("environment.properties")) {
properties.load(fis);
} catch (IOException e) {
- throw new RuntimeException("Не удалось загрузить environment.properties", e);
+ throw new RuntimeException("Неудалось загрузить environment.properties", e);
}
}
diff --git a/src/test/java/ru/ibs/framework/utils/AllureUtils.java b/src/test/java/ru/ibs/framework/utils/AllureUtils.java
new file mode 100644
index 0000000..17b864c
--- /dev/null
+++ b/src/test/java/ru/ibs/framework/utils/AllureUtils.java
@@ -0,0 +1,15 @@
+package ru.ibs.framework.utils;
+
+import io.qameta.allure.Attachment;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import ru.ibs.framework.managers.DriverManager;
+
+public class AllureUtils {
+
+ @Attachment(value = "Screenshot at step", type = "image/png")
+ public static byte[] attachScreenshot() {
+ return ((TakesScreenshot) DriverManager.getDriverManager().getDriver())
+ .getScreenshotAs(OutputType.BYTES);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/ru/ibs/framework/utils/MyAllureListener.java b/src/test/java/ru/ibs/framework/utils/MyAllureListener.java
new file mode 100644
index 0000000..2938605
--- /dev/null
+++ b/src/test/java/ru/ibs/framework/utils/MyAllureListener.java
@@ -0,0 +1,22 @@
+package ru.ibs.framework.utils;
+
+import io.qameta.allure.Attachment;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import ru.ibs.framework.managers.DriverManager;
+
+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);
+ }
+}
diff --git a/src/test/java/ru/ibs/tests/ApplineBusinessTripTest.java b/src/test/java/ru/ibs/tests/ApplineBusinessTripTest.java
new file mode 100644
index 0000000..2d67a06
--- /dev/null
+++ b/src/test/java/ru/ibs/tests/ApplineBusinessTripTest.java
@@ -0,0 +1,63 @@
+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/BusinessTripPage.java b/src/test/java/ru/ibs/tests/BusinessTripPage.java
index 892d905..ad36606 100644
--- a/src/test/java/ru/ibs/tests/BusinessTripPage.java
+++ b/src/test/java/ru/ibs/tests/BusinessTripPage.java
@@ -8,8 +8,8 @@ import org.openqa.selenium.support.ui.*;
import java.time.Duration;
public class BusinessTripPage {
- private WebDriver driver;
- private WebDriverWait wait;
+ private final WebDriver driver;
+ private final WebDriverWait wait;
@FindBy(xpath = "//h1[contains(text(), 'Командировки')]")
private WebElement tripsHeader;
@@ -77,7 +77,6 @@ public class BusinessTripPage {
scrollToElement(cityInput);
cityInput.clear();
cityInput.sendKeys(city);
- // Optionally assert
}
public void fillDate(By dateLocator, String dateValue) {
@@ -86,7 +85,6 @@ public class BusinessTripPage {
dateInput.clear();
dateInput.sendKeys(dateValue);
dateInput.sendKeys(Keys.TAB);
- // Optionally assert
}
public void saveAndClose() {
diff --git a/src/test/java/ru/ibs/tests/TestTrainingAppline.java b/src/test/java/ru/ibs/tests/TestTrainingAppline.java
deleted file mode 100644
index 903d21b..0000000
--- a/src/test/java/ru/ibs/tests/TestTrainingAppline.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package ru.ibs.tests;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
-
-import java.time.Duration;
-
-public class TestTrainingAppline {
-
- private WebDriver driver;
- private WebDriverWait wait;
- Duration default_timeout = Duration.ofSeconds(10);
- Duration default_sleep = Duration.ofMillis(500);
- String fieldXPath = "//input[@id='%s']";
-
- @Before
- public void before() {
- // win
- System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
-
- driver = new ChromeDriver();
- driver.manage().window().maximize();
- driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30));
- driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(30));
-
- wait = new WebDriverWait(driver, default_timeout, default_sleep);
-
- String baseUrl = "http://training.appline.ru/user/login";
- driver.get(baseUrl);
- }
-
- @Test
- public void applineLoginScenario() throws InterruptedException {
-
- WebElement usernameField = driver.findElement(By.xpath(String.format(fieldXPath, "prependedInput")));
- fillInputField(usernameField, "Irina Filippova");
-
- WebElement passwordField = driver.findElement(By.xpath(String.format(fieldXPath, "prependedInput2")));
- fillInputField(passwordField, "testing");
-
- // Нажать на кнопку Войти
- String buttonLocator = "//button[@type='submit']";
- WebElement loginButton = driver.findElement(By.xpath(buttonLocator));
- scrollToElementJs(loginButton);
- waitUtilElementToBeClickable(loginButton);
- loginButton.click();
-
- Thread.sleep(5000);
- }
-
- @After
- public void after() {
- driver.quit();
- }
-
- private void scrollToElementJs(WebElement element) {
- JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
- javascriptExecutor.executeScript("arguments[0].scrollIntoView(true);", element);
- }
-
- private void waitUtilElementToBeClickable(WebElement element) {
- wait.until(ExpectedConditions.elementToBeClickable(element));
- }
-
- private void waitUtilElementToBeVisible(By locator) {
- wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
- }
-
- private void waitUtilElementToBeVisible(WebElement element) {
- wait.until(ExpectedConditions.visibilityOf(element));
- }
-
- private void fillInputField(WebElement element, String value) {
- scrollToElementJs(element);
- waitUtilElementToBeClickable(element);
- element.click();
- element.clear();
- element.sendKeys(value);
- boolean checkFlag = wait.until(ExpectedConditions.attributeContains(element, "value", value));
- Assert.assertTrue("Поле было заполнено некорректно", checkFlag);
- }
-
-}
diff --git a/src/test/resources/chromedriver.exe b/src/test/resources/chromedriver.exe
deleted file mode 100644
index 148462f..0000000
Binary files a/src/test/resources/chromedriver.exe and /dev/null differ