import pytest import pytest_asyncio import asyncio from playwright.async_api import async_playwright, Page, expect @pytest.fixture(scope="session") def event_loop(): loop = asyncio.get_event_loop_policy().new_event_loop() yield loop loop.close() @pytest_asyncio.fixture(scope="function") async def browser(): async with async_playwright() as p: browser = await p.chromium.launch(headless=False, slow_mo=500) yield browser await browser.close() @pytest_asyncio.fixture(scope="function") async def context(browser): context = await browser.new_context( viewport={"width": 1920, "height": 1080}, user_agent="Mozilla/5.0 (X11; Linux x86_64) MyWebdav E2E Tests", ignore_https_errors=True, service_workers='block' ) yield context await context.close() @pytest_asyncio.fixture(scope="function") async def page(context): page = await context.new_page() yield page await page.close() @pytest.fixture def base_url(): return "http://localhost:9004" @pytest_asyncio.fixture(scope="function", autouse=True) async def login(page: Page, base_url): print(f"Navigating to base_url: {base_url}") await page.goto(f"{base_url}/") await page.screenshot(path="01_initial_page.png") # If already logged in, log out first to ensure a clean state if await page.locator('a:has-text("Logout")').is_visible(): await page.click('a:has-text("Logout")') await page.screenshot(path="02_after_logout.png") # Now, proceed with login or registration login_form = page.locator('#login-form:visible') if await login_form.count() > 0: await login_form.locator('input[name="username"]').fill('billingtest') await login_form.locator('input[name="password"]').fill('password123') await page.screenshot(path="03_before_login_click.png") await expect(page.locator('h2:has-text("Files")')).to_be_visible(timeout=10000) else: # If no login form, try to register await page.click('text=Sign Up') register_form = page.locator('#register-form:visible') await register_form.locator('input[name="username"]').fill('billingtest') await register_form.locator('input[name="email"]').fill('billingtest@example.com') await register_form.locator('input[name="password"]').fill('password123') await page.screenshot(path="05_before_register_click.png") await register_form.locator('button[type="submit"]').click() await expect(page.locator('h1:has-text("My Files")')).to_be_visible(timeout=10000)