Загрузка данных


# Предложение по улучшению интеграции Playwright + Allure

## Текущая проблема

Сейчас `PlaywrightService.afterTest()` всегда вызывает:

```java
LogsUtils.attachReport(devToolsManager, context);
```

В результате для каждого теста в Allure прикладываются:

* Screenshot
* Network Logs
* Console Logs

независимо от результата выполнения теста.

При большом количестве тестов это приводит к:

* существенному росту размера allure-results;
* увеличению времени генерации отчётов;
* накоплению большого количества бесполезных артефактов от успешных тестов;
* усложнению анализа отчётов.

Дополнительно отсутствует возможность сохранять видео только для упавших тестов.

---

## Предлагаемое решение

Добавить настройку уровня сервиса Playwright, позволяющую прикладывать артефакты только при падении теста.

Например:

```java
public interface PlaywrightArtifactsConfiguration {

    boolean attachScreenshotOnFailureOnly();

    boolean attachVideoOnFailureOnly();

    boolean attachLogsOnFailureOnly();

}
```

или

```java
public enum ArtifactAttachMode {
    ALWAYS,
    ON_FAILURE,
    NEVER
}
```

---

## Необходимые изменения

### 1. Передавать результат выполнения теста в сервис

Сейчас сервис не знает, завершился тест успешно или с ошибкой.

В `PerfeccionistaExtension.afterEach()` уже доступно:

```java
context.getExecutionException()
```

Поэтому предлагается передавать информацию о результате теста в Environment или Service.

Например:

```java
environment.addRelatedObject(
    "TEST_FAILED",
    context.getExecutionException().isPresent()
);
```

или добавить отдельный API:

```java
environment.setTestFailed(boolean);
```

---

### 2. Добавить поддержку видео в PlaywrightService

Во время создания контекста:

```java
new Browser.NewContextOptions()
        .setRecordVideoDir(...)
        .setRecordVideoSize(...);
```

Перед закрытием страницы:

```java
Path videoPath = page.video().path();
```

После закрытия страницы и контекста:

```java
Files.readAllBytes(videoPath);
```

---

### 3. Добавить новый AttachmentEntry

Например:

```java
VideoAttachmentEntry
    extends FileAttachmentEntry<byte[]>
```

с поддержкой:

```java
video/webm
```

---

### 4. Расширить AllureAttachmentProcessor

Добавить обработку:

```java
VideoAttachmentEntry
```

через

```java
Allure.addAttachment(
    fileName,
    "video/webm",
    inputStream,
    "webm"
);
```

---

## Изменение LogsUtils

Текущий код:

```java
LogsUtils.attachReport(
    devToolsManager,
    context
);
```

Предлагается расширить:

```java
LogsUtils.attachReport(
    devToolsManager,
    context,
    boolean testFailed,
    Path videoPath
);
```

и внутри выполнять прикрепление артефактов в зависимости от конфигурации.

---

## Ожидаемое поведение

Для успешного теста:

* не прикладывать Screenshot;
* не прикладывать Video;
* не прикладывать Console Logs;
* не прикладывать Network Logs.

Для упавшего теста:

* прикладывать Screenshot;
* прикладывать Video;
* прикладывать Console Logs;
* прикладывать Network Logs.

---

## Преимущества

* Значительное уменьшение размера allure-results.
* Более быстрый запуск Allure Report.
* Более удобный анализ падений.
* Возможность использовать видеозапись только как диагностический артефакт.
* Поведение соответствует распространённой практике Playwright/Selenide/Selenium фреймворков.