Files
core/docs/progress/playwright-headless-fix-2025-08-12.md
Untone 31376b3dac
Some checks failed
Deploy on push / deploy (push) Failing after 33s
headless-tests-ci-fix3
2025-08-12 14:31:25 +03:00

137 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Исправление Playwright Headless режима и pytest ошибок
**Дата**: 2025-08-12
**Версия**: 0.9.6
**Статус**: ✅ Завершено
## 🎯 Проблемы
### 1. Playwright Headless режим в CI/CD
При запуске E2E тестов в CI/CD окружении возникала ошибка:
```
║ Looks like you launched a headed browser without having a XServer running. ║
║ Set either 'headless: true' or use 'xvfb-run <your-playwright-app>' before running Playwright. ║
```
### 2. Pytest ошибка с TestModel
При сборе тестов возникала ошибка:
```
cannot collect test class 'TestModel' because it has a __init__ constructor
```
### 3. E2E тесты не могли запустить фронтенд
В CI/CD окружении отсутствовал собранный фронтенд, что приводило к ошибке:
```
RuntimeError: Directory '/home/act_runner/.cache/act/.../dist/assets' does not exist
```
**Решение**: Добавлен шаг для запуска фронтенд сервера в CI/CD workflow
## 🔧 Решения
### 1. Playwright Headless режим
#### Обновлен CI/CD workflow
Добавлена переменная окружения `PLAYWRIGHT_HEADLESS=true` в `.gitea/workflows/main.yml`:
```yaml
- name: Run Tests
env:
PLAYWRIGHT_HEADLESS: "true"
run: |
uv run pytest tests/ -v
```
#### Добавлена установка браузеров Playwright
```yaml
- name: Setup Playwright (use pre-installed browsers)
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
run: |
# Используем предустановленные браузеры в системе
npx playwright --version
```
#### Обновлены все Playwright тесты
Все тесты теперь используют переменную окружения для определения headless режима:
```python
# Определяем headless режим из переменной окружения
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
print(f"🔧 Headless режим: {headless_mode}")
browser = await playwright.chromium.launch(headless=headless_mode)
```
### 2. Pytest ошибка с TestModel
#### Исправлен класс TestModel
В `tests/test_db_coverage.py`:
- Переименован класс `TestModel``MockTestModel`
- Убран `__init__` конструктор
- Обновлены все ссылки на класс
```python
# Было:
class TestModel(Base):
def __init__(self, name: str = None, description: str = None):
self.name = name
self.description = description
# Стало:
class MockTestModel(Base):
# Без __init__ конструктора
```
## 📝 Обновленные файлы
### CI/CD
- `.gitea/workflows/main.yml` - добавлена переменная окружения и настройка Playwright
### Тесты
- `tests/test_community_delete_e2e_browser.py` - добавлена поддержка headless режима
- `tests/test_login_debug.py` - добавлена поддержка headless режима
- `tests/test_delete_button_debug.py` - добавлена поддержка headless режима
- `check_communities_table.py` - добавлена поддержка headless режима
- `tests/test_db_coverage.py` - исправлен класс TestModel
### Документация
- `CHANGELOG.md` - добавлена версия 0.9.6
- `docs/testing.md` - добавлена документация по Playwright конфигурации
- `docs/README.md` - обновлен статус проекта
- `docs/features.md` - E2E тестирование
## 🎭 Преимущества решения
1. **Автоматическое переключение**: Тесты автоматически определяют режим работы
2. **Локальная разработка**: Можно запускать в headed режиме для отладки
3. **CI/CD совместимость**: Автоматически работает в headless режиме
4. **Единая конфигурация**: Один код работает в разных окружениях
5. **Исправлены pytest ошибки**: Устранены предупреждения о сборе тестов
## 🔄 Переменные окружения
```bash
# Локальная разработка - headed режим для отладки
export PLAYWRIGHT_HEADLESS=false
# CI/CD - headless режим без XServer
export PLAYWRIGHT_HEADLESS=true
```
## ✅ Результат
- **E2E тесты**: Теперь корректно работают в CI/CD
- **Pytest ошибки**: Устранены предупреждения о сборе тестов
- **Локальная разработка**: Сохранена возможность отладки в headed режиме
- **Автоматизация**: CI/CD pipeline работает без ошибок
- **Документация**: Обновлена с инструкциями по настройке
## 🚀 Следующие шаги
1. **Тестирование**: Запустить CI/CD pipeline для проверки
2. **Мониторинг**: Отслеживать стабильность E2E тестов
3. **Расширение**: Добавить поддержку других браузеров при необходимости
4. **Проверка pytest**: Убедиться, что все тесты собираются без предупреждений