from playwright.sync_api import sync_playwright import sys def test_login_flow(): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() console_errors = [] page.on("console", lambda msg: console_errors.append(msg.text) if msg.type == "error" else None) # Navigate to login page print("1. Navigating to login page...") page.goto('http://localhost:3000/login') page.wait_for_load_state('networkidle') print(" ✓ Page loaded") # Fill in login form print("2. Filling login form...") page.fill('input[id="username"]', 'admin') page.fill('input[id="password"]', 'admin123') print(" ✓ Credentials entered") # Submit form print("3. Submitting form...") page.click('button[type="submit"]') # Wait for navigation to dashboard page.wait_for_url('**/dashboard**', timeout=10000) print(f" ✓ Redirected to: {page.url}") # Wait for dashboard to load page.wait_for_load_state('networkidle') # Check dashboard elements print("4. Checking dashboard elements...") # Check for sidebar sidebar = page.locator('nav').first if sidebar.is_visible(): print(" ✓ Sidebar navigation is visible") # Check for page title h1 = page.locator('h1').first if h1.is_visible(): title_text = h1.text_content() print(f" ✓ Dashboard title: '{title_text}'") # Check for console errors if console_errors: print(f"⚠ Console errors: {console_errors}") else: print(" ✓ No console errors") # Take screenshot screenshot_path = '/tmp/dashboard.png' page.screenshot(path=screenshot_path, full_page=True) print(f" ✓ Screenshot saved to {screenshot_path}") browser.close() print("\n✅ Login flow test passed!") if __name__ == "__main__": test_login_flow()