tests-fixes
Some checks failed
Deploy on push / deploy (push) Has been cancelled

This commit is contained in:
2025-08-12 13:59:04 +03:00
parent 09dd86b51a
commit 13779e125e
2 changed files with 232 additions and 114 deletions

View File

@@ -54,28 +54,43 @@ class TestCommunityDeleteE2EBrowser:
backend_running = False
if not backend_running:
# Запускаем бэкенд сервер
# Запускаем бэкенд сервер в CI/CD среде
print("🔄 Запускаем бэкенд сервер...")
backend_process = subprocess.Popen(
["python3", "dev.py"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
try:
# В CI/CD используем uv run python
backend_process = subprocess.Popen(
["uv", "run", "python", "dev.py"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
# Ждем запуска бэкенда
print("⏳ Ждем запуска бэкенда...")
for i in range(30): # Ждем максимум 30 секунд
try:
response = requests.get("http://localhost:8000/", timeout=2)
if response.status_code == 200:
print("✅ Бэкенд сервер запущен")
break
except:
pass
await asyncio.sleep(1)
else:
raise Exception("Бэкенд сервер не запустился за 30 секунд")
# Ждем запуска бэкенда
print("⏳ Ждем запуска бэкенда...")
for i in range(20): # Ждем максимум 20 секунд
try:
response = requests.get("http://localhost:8000/", timeout=2)
if response.status_code == 200:
print("✅ Бэкенд сервер запущен")
break
except:
pass
await asyncio.sleep(1)
else:
# Если сервер не запустился, выводим логи и завершаем тест
print("❌ Бэкенд сервер не запустился за 20 секунд")
# Получаем логи процесса
if backend_process:
stdout, stderr = backend_process.communicate()
print(f"📋 STDOUT: {stdout.decode()}")
print(f"📋 STDERR: {stderr.decode()}")
raise Exception("Бэкенд сервер не запустился за 20 секунд")
except Exception as e:
print(f"❌ Ошибка запуска сервера: {e}")
raise Exception(f"Не удалось запустить бэкенд сервер: {e}")
# Проверяем фронтенд
try:
@@ -89,14 +104,44 @@ class TestCommunityDeleteE2EBrowser:
frontend_running = False
if not frontend_running:
# Запускаем фронтенд сервер
# Запускаем фронтенд сервер в CI/CD среде
print("🔄 Запускаем фронтенд сервер...")
frontend_process = subprocess.Popen(
["npm", "run", "dev"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
try:
frontend_process = subprocess.Popen(
["npm", "run", "dev"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
# Ждем запуска фронтенда
print("⏳ Ждем запуска фронтенда...")
for i in range(15): # Ждем максимум 15 секунд
try:
response = requests.get("http://localhost:3000", timeout=2)
if response.status_code == 200:
print("✅ Фронтенд сервер запущен")
break
except:
pass
await asyncio.sleep(1)
else:
# Если фронтенд не запустился, выводим логи
print("❌ Фронтенд сервер не запустился за 15 секунд")
# Получаем логи процесса
if frontend_process:
stdout, stderr = frontend_process.communicate()
print(f"📋 STDOUT: {stdout.decode()}")
print(f"📋 STDERR: {stderr.decode()}")
print("⚠️ Продолжаем тест без фронтенда (только API тесты)")
frontend_process = None
except Exception as e:
print(f"⚠️ Не удалось запустить фронтенд сервер: {e}")
print("🔄 Продолжаем тест без фронтенда (только API тесты)")
frontend_process = None
# Ждем запуска фронтенда
print("⏳ Ждем запуска фронтенда...")
@@ -191,9 +236,13 @@ class TestCommunityDeleteE2EBrowser:
page = browser_setup["page"]
# Серверы уже запущены в browser_setup фикстуре
print("✅ Серверы запущены и готовы к тестированию")
# Используем существующее сообщество для тестирования удаления
test_community_name = "Test Admin Community" # Существующее сообщество из БД
test_community_slug = "test-admin-community-test-7674853a" # Конкретный slug для удаления (ID=13)
# Берем первое доступное сообщество из БД
test_community_name = "Test Editor Community" # Существующее сообщество из БД
test_community_slug = "test-editor-community-test-902f937f" # Конкретный slug для удаления
print(f"🔍 Будем тестировать удаление сообщества: {test_community_name}")
@@ -256,19 +305,129 @@ class TestCommunityDeleteE2EBrowser:
# 4. Ищем наше тестовое сообщество
print(f"🔍 Ищем сообщество: {test_community_name}")
# Ждем появления таблицы сообществ
await page.wait_for_selector('table', timeout=10000)
print("✅ Таблица сообществ найдена")
# Сначала делаем скриншот для отладки
await page.screenshot(path="test-results/debug_page.png")
print("📸 Скриншот страницы сохранен для отладки")
# Ждем загрузки данных
await page.wait_for_selector('table tbody tr', timeout=10000)
print("✅ Данные в таблице загружены")
# Получаем HTML страницы для отладки
page_html = await page.content()
print(f"📄 Размер HTML страницы: {len(page_html)} символов")
# Ищем любые таблицы на странице
tables = await page.query_selector_all('table')
print(f"🔍 Найдено таблиц на странице: {len(tables)}")
# Ищем другие возможные селекторы для списка сообществ
possible_selectors = [
'table',
'[data-testid="communities-table"]',
'.communities-table',
'.communities-list',
'[class*="table"]',
'[class*="list"]'
]
found_element = None
for selector in possible_selectors:
try:
element = await page.wait_for_selector(selector, timeout=2000)
if element:
print(f"✅ Найден элемент с селектором: {selector}")
found_element = element
break
except:
continue
if not found_element:
print("Не найдена таблица сообществ")
print("🔍 Доступные элементы на странице:")
# Получаем список всех элементов с классами
elements_with_classes = await page.evaluate("""
() => {
const elements = document.querySelectorAll('*[class]');
const classes = {};
elements.forEach(el => {
const classList = Array.from(el.classList);
classList.forEach(cls => {
if (!classes[cls]) classes[cls] = 0;
classes[cls]++;
});
});
return classes;
}
""")
print(f"📋 Классы элементов: {elements_with_classes}")
raise Exception("Не найдена таблица сообществ на странице")
print("✅ Элемент со списком сообществ найден")
# Ждем загрузки данных в найденном элементе
# Используем найденный элемент вместо жестко заданного селектора
print("⏳ Ждем загрузки данных...")
# Ждем дольше для загрузки данных
await page.wait_for_timeout(5000)
try:
# Ищем строки в найденном элементе
rows = await found_element.query_selector_all('tr, [class*="row"], [class*="item"], [class*="card"], [class*="community"]')
if rows:
print(f"✅ Найдено строк в элементе: {len(rows)}")
# Выводим содержимое первых нескольких строк для отладки
for i, row in enumerate(rows[:3]):
try:
text = await row.text_content()
print(f"📋 Строка {i+1}: {text[:100]}...")
except:
print(f"📋 Строка {i+1}: [не удалось прочитать]")
else:
print("⚠️ Строки данных не найдены")
# Пробуем найти любые элементы с текстом
all_elements = await found_element.query_selector_all('*')
print(f"🔍 Всего элементов в найденном элементе: {len(all_elements)}")
# Ищем элементы с текстом
text_elements = []
for elem in all_elements[:10]: # Проверяем первые 10
try:
text = await elem.text_content()
if text and text.strip() and len(text.strip()) > 3:
text_elements.append(text.strip()[:50])
except:
pass
print(f"📋 Элементы с текстом: {text_elements}")
except Exception as e:
print(f"⚠️ Ошибка при поиске строк: {e}")
print("✅ Данные загружены")
# Ищем строку с нашим конкретным сообществом по slug
community_row = await page.wait_for_selector(
f'table tbody tr:has-text("{test_community_slug}")',
timeout=10000
)
# Используем найденный элемент и ищем по тексту
community_row = None
# Ищем в найденном элементе
try:
community_row = await found_element.query_selector(f'*:has-text("{test_community_slug}")')
if community_row:
print(f"✅ Найдено сообщество {test_community_slug} в элементе")
else:
# Если не найдено, ищем по всему содержимому
print(f"🔍 Ищем сообщество {test_community_slug} по всему содержимому...")
all_text = await found_element.text_content()
if test_community_slug in all_text:
print(f"✅ Текст сообщества {test_community_slug} найден в содержимом")
# Ищем родительский элемент, содержащий этот текст
community_row = await found_element.query_selector(f'*:has-text("{test_community_slug}")')
else:
print(f"❌ Сообщество {test_community_slug} не найдено в содержимом")
except Exception as e:
print(f"⚠️ Ошибка при поиске сообщества: {e}")
if not community_row:
# Делаем скриншот для отладки