citesting-fix1
Some checks failed
Deploy on push / deploy (push) Failing after 2m0s

This commit is contained in:
2025-08-17 11:37:55 +03:00
parent 4b88a8c449
commit bc8447a444
6 changed files with 648 additions and 227 deletions

View File

@@ -6,41 +6,81 @@
import asyncio
import time
import os
import requests
from playwright.async_api import async_playwright
async def wait_for_server_ready(url: str, timeout: int = 60) -> bool:
"""Ждем готовности сервера"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
return True
except:
pass
await asyncio.sleep(2)
return False
async def test_delete_button(frontend_url):
"""Тест поиска кнопки удаления с улучшенной обработкой ошибок"""
# Проверяем готовность фронтенда
print(f"🌐 Проверяем готовность фронтенда {frontend_url}...")
if not await wait_for_server_ready(frontend_url):
print(f"❌ Фронтенд {frontend_url} не готов в течение 60 секунд")
return False
print(f"✅ Фронтенд {frontend_url} готов")
async with async_playwright() as p:
# Определяем headless режим из переменной окружения
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "true").lower() == "true"
print(f"🔧 Headless режим: {headless_mode}")
browser = await p.chromium.launch(headless=headless_mode)
browser = await p.chromium.launch(
headless=headless_mode,
args=['--no-sandbox', '--disable-dev-shm-usage']
)
page = await browser.new_page()
# Увеличиваем таймауты для CI
page.set_default_timeout(30000) # 30 секунд
page.set_default_navigation_timeout(30000)
try:
print(f"🌐 Открываем админ-панель на {frontend_url}...")
await page.goto(f"{frontend_url}/login")
await page.wait_for_load_state("networkidle")
await page.goto(f"{frontend_url}/login", wait_until="networkidle")
print("✅ Страница логина загружена")
print("🔐 Авторизуемся...")
# Ждем появления полей ввода
await page.wait_for_selector('input[type="email"]', timeout=15000)
await page.wait_for_selector('input[type="password"]', timeout=15000)
await page.fill('input[type="email"]', "test_admin@discours.io")
await page.fill('input[type="password"]', "password123")
await page.click('button[type="submit"]')
# Ждем авторизации
await page.wait_for_url(f"{frontend_url}/admin/**", timeout=10000)
# Ждем авторизации с увеличенным таймаутом
await page.wait_for_url(f"{frontend_url}/admin/**", timeout=20000)
print("✅ Авторизация успешна")
print("📋 Переходим на страницу сообществ...")
await page.goto(f"{frontend_url}/admin/communities")
await page.wait_for_load_state("networkidle")
await page.goto(f"{frontend_url}/admin/communities", wait_until="networkidle")
print("✅ Страница сообществ загружена")
print("🔍 Ищем таблицу сообществ...")
await page.wait_for_selector("table", timeout=10000)
await page.wait_for_selector("table tbody tr", timeout=10000)
await page.wait_for_selector("table", timeout=15000)
await page.wait_for_selector("table tbody tr", timeout=15000)
print("✅ Таблица сообществ найдена")
# Создаем папку для скриншотов если её нет
os.makedirs("test-results", exist_ok=True)
print("📸 Делаем скриншот таблицы...")
await page.screenshot(path="test-results/communities_table_debug.png")
@@ -112,15 +152,25 @@ async def test_delete_button(frontend_url):
class_name = await btn.get_attribute("class")
print(f" Кнопка {i}: текст='{text}', класс='{class_name}'")
return True
else:
print("❌ Строка с Test Community не найдена")
return False
except Exception as e:
print(f"❌ Ошибка: {e}")
# Создаем папку для скриншотов если её нет
os.makedirs("test-results", exist_ok=True)
await page.screenshot(path=f"test-results/error_{int(time.time())}.png")
return False
finally:
await browser.close()
if __name__ == "__main__":
asyncio.run(test_delete_button())
result = asyncio.run(test_delete_button("http://localhost:3000"))
if result:
print("✅ Тест завершен успешно")
else:
print("❌ Тест завершен с ошибками")
exit(1)