""" Test Yonyou BIP system login functionality """ import sys from pathlib import Path # Add project root to Python path PROJECT_ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(PROJECT_ROOT)) from playwright.sync_api import sync_playwright from utils.auth import login, logout import os # Load environment variables from dotenv import load_dotenv load_dotenv(PROJECT_ROOT / ".env") # Configure browser path os.environ["PLAYWRIGHT_BROWSERS_PATH"] = os.getenv("PLAYWRIGHT_BROWSERS_PATH") print("=" * 60) print("Testing Yonyou BIP Login and Logout") print("=" * 60) # Display configuration information print(f"\nConfiguration:") print(f" URL: {os.getenv('ERP_URL')}") print(f" Username: {os.getenv('ERP_USERNAME')}") print(f" Headless: {os.getenv('ERP_HEADLESS')}") print(f" Ignore HTTPS Errors: {os.getenv('ERP_IGNORE_HTTPS_ERRORS')}") # Construct complete login URL base_url = os.getenv('ERP_URL') if not base_url: raise ValueError("ERP_URL environment variable is required") url = f"{base_url.rstrip('/')}/yonbip/resources/uap/rbac/login/main/index.html" try: with sync_playwright() as p: print("\n[1/5] Starting browser...") browser, context, page, main_frame = login( playwright=p, username=os.getenv('ERP_USERNAME'), password=os.getenv('ERP_PASSWORD'), url=url, headless=os.getenv('ERP_HEADLESS', 'false').lower() in ('true', '1', 'yes'), ignore_https_errors=os.getenv('ERP_IGNORE_HTTPS_ERRORS', 'true').lower() in ('true', '1', 'yes'), verbose=True ) print("\n[2/5] Login successful!") # Wait a moment to observe the page after login print("\n[3/5] Waiting 3 seconds to observe the page after login...") import time time.sleep(3) # Test logout print("\n[4/5] Testing logout...") logout(main_frame, verbose=True) print("\n[5/5] Logout successful!") # Wait a moment to observe the page after logout print("\nWaiting 2 seconds to observe the page after logout...") time.sleep(2) print("\n[SUCCESS] Login and logout test completed successfully!") # Check if auto-close browser auto_close = os.getenv("ERP_AUTO_CLOSE_BROWSER", "true").lower() in ("true", "1", "yes") if not auto_close: print("\n[INFO] Browser will stay open for 10 seconds for manual observation...") time.sleep(10) # Close browser print("\n[CLEANUP] Closing browser session...") context.close() browser.close() except Exception as e: print(f"\n[ERROR] Login/logout test failed!") print(f"Error: {e}") import traceback traceback.print_exc() print("\n" + "=" * 60) print("Test completed") print("=" * 60)