# Предложение по улучшению интеграции 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 фреймворков.