CP_AUTOMATION/scripts/test_single_student.py
2025-12-12 19:54:54 +05:30

129 lines
4.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Test Single Student Flow
Quick test script to verify the complete flow works for a single student.
"""
import sys
import time
from pathlib import Path
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from pages.login_page import LoginPage
from pages.mandatory_reset_page import MandatoryResetPage
from pages.profile_incomplete_page import ProfileIncompletePage
from pages.profile_editor_page import ProfileEditorPage
from utils.driver_manager import DriverManager
from config.config import BASE_URL, TEST_NEW_PASSWORD
def test_student_flow(cpid, password, headless=False):
"""
Test complete flow for a single student
Args:
cpid: Student CPID
password: Student password
headless: Run in headless mode
"""
driver = None
try:
print(f"\n{'='*80}")
print(f"TESTING STUDENT: {cpid}")
print(f"{'='*80}\n")
# Initialize driver
driver_manager = DriverManager()
driver = driver_manager.get_driver(headless=headless)
# Step 1: Login
print("[STEP 1] Logging in...")
login_page = LoginPage(driver)
login_page.login(identifier=cpid, password=password)
time.sleep(2)
print(f" ✅ Logged in successfully")
print(f" Current URL: {driver.current_url}")
# Step 2: Handle Password Reset
print("\n[STEP 2] Checking for Password Reset...")
reset_page = MandatoryResetPage(driver)
if reset_page.is_modal_present():
print(" ✅ Password reset modal found")
print(" Automatically handling password reset...")
reset_page.reset_password(
current_password=password,
new_password=TEST_NEW_PASSWORD,
confirm_password=TEST_NEW_PASSWORD
)
print(" ✅ Password reset completed")
password = TEST_NEW_PASSWORD # Update for future use
else:
print(" ✅ No password reset required")
# Step 3: Handle Profile Incomplete Modal
print("\n[STEP 3] Checking for Profile Incomplete Modal...")
profile_incomplete = ProfileIncompletePage(driver)
if profile_incomplete.is_modal_present():
progress = profile_incomplete.get_progress_value()
print(f" Profile incomplete - Current Progress: {progress}")
print(" Clicking Complete Profile button...")
profile_incomplete.click_complete()
time.sleep(3)
print(f" Navigated to: {driver.current_url}")
else:
print(" ✅ Profile already complete or modal not present")
# Step 4: Check Profile Editor (only if profile incomplete modal was shown)
print("\n[STEP 4] Checking Profile Status...")
try:
# Try to navigate to profile editor to check status
from pages.student_nav_page import StudentNavPage
nav = StudentNavPage(driver)
# Check if we can access profile editor
current_url = driver.current_url
if "/profile" in current_url or "/dashboard" in current_url:
print(f" Current URL: {current_url}")
print(" ✅ Successfully logged in and navigated")
print(" Note: Profile status can be checked from dashboard")
except Exception as e:
print(f" ⚠️ Could not check profile editor: {e}")
print(" But login was successful!")
print(f"\n{'='*80}")
print("TEST COMPLETED SUCCESSFULLY")
print(f"{'='*80}\n")
# Keep browser open for inspection if not headless
if not headless:
print("Keeping browser open for 30 seconds for inspection...")
time.sleep(30)
except Exception as e:
print(f"\n❌ ERROR: {e}")
import traceback
traceback.print_exc()
finally:
if driver:
driver.quit()
def main():
"""Main entry point"""
import argparse
parser = argparse.ArgumentParser(description='Test single student flow')
parser.add_argument('--cpid', type=str, required=True, help='Student CPID')
parser.add_argument('--password', type=str, required=True, help='Student password')
parser.add_argument('--headless', action='store_true', help='Run in headless mode')
args = parser.parse_args()
test_student_flow(args.cpid, args.password, headless=args.headless)
if __name__ == "__main__":
main()