This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user