Files
flvx/tests/e2e/example_test.py

66 lines
2.0 KiB
Python

#!/usr/bin/env python3
"""
Example E2E test script demonstrating Playwright usage.
Run: python with_server.py -- python example_test.py
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from playwright.sync_api import sync_playwright
def test_login_flow():
"""Test basic login flow."""
import os
frontend_port = os.getenv("E2E_FRONTEND_PORT", "3000")
backend_port = os.getenv("E2E_BACKEND_PORT", "6365")
print(f"Testing frontend at http://localhost:{frontend_port}")
print(f"Backend API at http://localhost:{backend_port}")
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.set_default_timeout(10000)
try:
page.goto(f"http://localhost:{frontend_port}/")
page.wait_for_load_state("networkidle")
print("Login page loaded")
username_input = page.locator('input[placeholder="请输入用户名"]')
password_input = page.locator('input[placeholder="请输入密码"]')
login_button = page.locator('button:has-text("登录")')
assert username_input.count() > 0, "Username input not found"
assert password_input.count() > 0, "Password input not found"
assert login_button.count() > 0, "Login button not found"
print("Login form elements found")
username_input.fill("admin_user")
password_input.fill("admin_user")
login_button.click()
page.wait_for_url("**/dashboard**", timeout=5000)
print("Login successful, redirected to dashboard")
assert "/dashboard" in page.url, f"Expected dashboard URL, got {page.url}"
print("Test passed!")
except Exception as e:
page.screenshot(path="/tmp/test_failure.png")
print(f"Test failed: {e}")
raise
finally:
browser.close()
if __name__ == "__main__":
test_login_flow()