From 14d2dfbaf5c350ddbcf29cce78d9bc8694b9bcb5 Mon Sep 17 00:00:00 2001 From: Kenil_KB Date: Fri, 12 Dec 2025 19:54:54 +0530 Subject: [PATCH] first commit --- .cursorrules | 236 + .gitignore | 66 + ...s_with_passwords_2025-12-08T08-04-09.xlsx# | 1 + ...ts-with-passwords-2025-12-10T11-56-42.xlsx | Bin 0 -> 104359 bytes ...ts-with-passwords-2025-12-10T11-56-53.xlsx | Bin 0 -> 104359 bytes ...ts-with-passwords-2025-12-10T11-57-04.xlsx | Bin 0 -> 104359 bytes ...ts-with-passwords-2025-12-10T11-57-13.xlsx | Bin 0 -> 104359 bytes ...ts-with-passwords-2025-12-10T11-58-21.xlsx | Bin 0 -> 104359 bytes ...ts-with-passwords-2025-12-10T11-59-09.xlsx | Bin 0 -> 104359 bytes .../COMPLETE_MISSING_LOCATORS_LIST.md | 433 ++ .../cognitive-prism-academia-backend | 1 + .../.vite/deps/_metadata.json | 8 + .../.vite/deps/package.json | 3 + .../cognitive-prism-academia-backend | 1 + .../cognitive-prism-assesment-ui | 1 + .../backup_docs/AUTOMATION_LOCATORS.md | 49 + .../backup_docs/MISSING_ATTRIBUTES_LIST.md | 250 + .../QUICK_REFERENCE_DATA_TESTID.md | 209 + .../REQUIRED_DATA_TESTID_ATTRIBUTES.md | 327 + .../TEMPORARY_LOCATORS_TO_REPLACE.md | 239 + .../backup_docs/UI_CODE_ANALYSIS.md | 530 ++ .../backup_docs/UI_DEV_TEAM_REQUIREMENTS.md | 495 ++ .../UI_DEV_TEAM_REQUIREMENTS_COMPLETE.md | 575 ++ .../Cognition - 1. Cognitive Flexibility.pdf | Bin 0 -> 1361472 bytes .../Cognition - 2. Response Inhibition.pdf | Bin 0 -> 786245 bytes .../cognitive-docs/Cognition - 3. Memory.pdf | Bin 0 -> 1222975 bytes ...tion - 4 Attention - Color Stroop Task.pdf | Bin 0 -> 860769 bytes ...- 5 Working Memory- Sternberg Paradigm.pdf | Bin 0 -> 3710171 bytes ...- 5 Working Memory- Sternberg Paradigm.txt | 5857 +++++++++++++++++ .../Cognition - 6 Reasoning.pdf | Bin 0 -> 1055776 bytes ... - 7 Problem Solving Abilities_5 tasks.pdf | Bin 0 -> 400593 bytes .../Doc/FRONTEND_IMPLEMENTATION_PLAN.md | 1732 +++++ .../my-project/cognitive-docs/Doc/RIT.md | 859 +++ .../my-project/cognitive-docs/Doc/VPAM.md | 2027 ++++++ .../my-project/cognitive-docs/Doc/VPSM.mdc | 1926 ++++++ .../cognitive-docs/Doc/VPSM_FINAL_REPORT.md | 153 + .../Doc/VPSM_IMPLEMENTATION_CHECKLIST.md | 175 + .../cognitive-docs/Doc/vpam_rules.md | 2471 +++++++ .../cognitive-prism-academia-backend | 1 + .../my-project/cognitive-prism-assesment-ui | 1 + .../my-project/docTracks/00_INDEX.md | 211 + .../docTracks/01_CODE_EVIDENCE_STATUS.md | 111 + .../my-project/docTracks/02_PATTERN_RULES.md | 200 + .../docTracks/03_VERIFICATION_SCRIPT.md | 186 + .../04_ATTRIBUTE_VERIFICATION_REPORT.md | 367 ++ .../05_CODE_EVIDENCE_ATTRIBUTE_COUNT.md | 173 + .../06_MANDATORY_RESET_VERIFICATION.md | 83 + ...LEMENTATION_SUMMARY_FOR_AUTOMATION_TEAM.md | 349 + .../docTracks/08_HONEST_STATUS_REPORT.md | 197 + .../09_BROWSER_VERIFICATION_SCRIPT.md | 488 ++ .../10_FINAL_IMPLEMENTATION_STATUS.md | 367 ++ .../11_AUTOMATION_TEAM_CLAIMS_VERIFICATION.md | 286 + .../docTracks/12_READINESS_ASSESSMENT.md | 278 + .../docTracks/13_IMPLEMENTATION_PROGRESS.md | 122 + ...14_COMPLETE_IMPLEMENTATION_VERIFICATION.md | 343 + .../15_READINESS_FOR_NEXT_REQUIREMENTS.md | 155 + .../16_MISSING_ATTRIBUTES_IMPLEMENTATION.md | 257 + .../my-project/dom_validation_results.json | 210 + ...ts_with_passwords_2025-12-12T13-19-32.xlsx | Bin 0 -> 886735 bytes config/__init__.py | 9 + config/config.py | 80 + config/load_test_config.py | 79 + config/test_data.py | 42 + documentation/ORGANIZATION_COMPLETE.md | 123 + documentation/README.md | 140 + documentation/STRUCTURE.md | 130 + .../100_PERCENT_COMPLETION_STATUS.md | 79 + .../100_PERCENT_COMPLETION_VERIFICATION.md | 151 + .../AUTOMATION_UPDATES_SUMMARY.md | 304 + .../COMPLETE_CONTEXT_AND_STATUS.md | 551 ++ .../COMPLETE_PLATFORM_EXPLORATION.md | 416 ++ .../COMPLETE_TEST_EXECUTION_REPORT.md | 352 + .../COMPLETE_VERIFICATION_AND_IMPROVEMENTS.md | 170 + .../COMPREHENSIVE_IMPLEMENTATION_ANALYSIS.md | 434 ++ .../COMPREHENSIVE_REVIEW_AND_FIXES.md | 287 + .../COMPREHENSIVE_TEST_ANALYSIS.md | 204 + .../FINAL_100_PERCENT_COMPLETION_REPORT.md | 165 + ...NAL_GAP_ANALYSIS_100_PERCENT_COMPLETION.md | 122 + .../FINAL_OBSERVATIONS_AND_IMPROVEMENTS.md | 222 + .../automation-status/FINAL_REVIEW_SUMMARY.md | 265 + .../automation-status/FINAL_TESTING_REPORT.md | 219 + .../FINAL_VERIFICATION_STATUS.md | 165 + .../HOW_IT_WORKS_STUDENT_DATA.md | 354 + .../LOCATOR_UPDATE_SUMMARY.md | 130 + .../MANDATORY_RESET_FLOW_STATUS.md | 100 + .../OPTIMIZATION_COMPLETE.md | 204 + .../automation-status/OPTIMIZATION_RESULTS.md | 190 + .../PASSWORD_RESET_FIX_SUMMARY.md | 83 + .../PASSWORD_RESET_IMPROVEMENTS.md | 229 + .../automation-status/PERFORMANCE_ANALYSIS.md | 168 + .../PERFORMANCE_OPTIMIZATION_PLAN.md | 187 + .../PROFILE_COMPLETION_FIXED.md | 155 + .../RANDOMIZED_WAIT_IMPLEMENTATION.md | 244 + .../STUDENT_DATA_MANAGEMENT_SOLUTION.md | 291 + .../TESTING_STATUS_AND_ANSWERS.md | 254 + .../TEST_EXECUTION_OBSERVATIONS.md | 129 + .../TEST_OBSERVATION_AND_ANALYSIS.md | 148 + .../UI_TEAM_IMPLEMENTATION_VERIFICATION.md | 151 + .../UI_TEAM_IMPLEMENTATION_VERIFIED.md | 202 + .../VERIFICATION_AND_COMPLETION_SUMMARY.md | 85 + ...LD_CLASS_ASSESSMENT_AUTOMATION_COMPLETE.md | 295 + ...WORLD_CLASS_ASSESSMENT_AUTOMATION_READY.md | 245 + .../WORLD_CLASS_AUTOMATION_COMPLETE.md | 268 + .../WORLD_CLASS_AUTOMATION_READY.md | 177 + .../WORLD_CLASS_WAIT_OPTIMIZATION.md | 258 + .../debug-tools/WORLD_CLASS_DEBUG_APPROACH.md | 184 + .../QUICK_REFERENCE_MANDATORY_RESET.md | 86 + .../COMPLETE_UI_TEAM_REQUIREMENTS.md | 848 +++ ...FINAL_COMPLETE_DATA_TESTID_REQUIREMENTS.md | 2004 ++++++ .../MISSING_ATTRIBUTES_FINAL_REQUIREMENTS.md | 337 + documentation/ui-team-requirements/README.md | 82 + .../UI_TEAM_DATA_TESTID_REQUIREMENTS.md | 569 ++ .../UI_TEAM_IMPLEMENTATION_REVIEW.md | 510 ++ .../UI_TEAM_MANDATORY_RESET_DATA_TESTID.md | 382 ++ .../UI_TEAM_QUICK_REFERENCE.md | 180 + .../DOM_VERIFICATION_REPORT.json | 232 + .../FINAL_VERIFICATION_SUMMARY.md | 121 + .../FINAL_VERIFICATION_UI_TEAM_CLAIMS.md | 224 + .../IMPLEMENTATION_VERIFICATION_REPORT.md | 326 + .../UI_TEAM_CLAIMS_VERIFICATION.md | 341 + pages/__init__.py | 9 + pages/age_verification_modal.py | 277 + pages/assessments_page.py | 85 + pages/base_page.py | 175 + pages/dashboard_page.py | 95 + pages/domain_assessment_page.py | 442 ++ pages/domain_feedback_page.py | 133 + pages/domains_page.py | 242 + pages/feedback_survey_page.py | 109 + pages/login_page.py | 305 + pages/mandatory_reset_page.py | 498 ++ pages/profile_editor_page.py | 2115 ++++++ pages/profile_incomplete_page.py | 99 + pages/student_nav_page.py | 217 + pytest.ini | 47 + scripts/ADVANCED_LOAD_TEST_README.md | 293 + scripts/LOAD_TEST_ISSUES_FIXED.md | 120 + scripts/LOAD_TEST_README.md | 200 + scripts/QUICK_START_LOAD_TEST.md | 97 + scripts/README.md | 63 + scripts/RUN_LOAD_TEST_500_STUDENTS.sh | 36 + scripts/check_profile_tabs.py | 119 + scripts/complete_journey_test.py | 546 ++ scripts/complete_profile_and_analyze.py | 433 ++ scripts/complete_profile_to_assessment.py | 458 ++ scripts/comprehensive_dom_verification.py | 661 ++ scripts/debug_dom_inspector.py | 330 + scripts/debug_password_reset.py | 147 + scripts/debug_question_29.py | 199 + scripts/debug_question_detection.py | 160 + scripts/diagnose_issues.py | 162 + scripts/generate_synthetic_data.py | 273 + scripts/load_test_e2e_assessment.py | 645 ++ scripts/load_test_e2e_assessment_advanced.py | 849 +++ scripts/process_students.py | 337 + scripts/profile_data_example.json | 88 + scripts/quick_dom_check.py | 150 + scripts/test_complete_flow.py | 228 + scripts/test_complete_student_journey.py | 323 + .../test_profile_filling_with_screenshots.py | 479 ++ scripts/test_single_student.py | 128 + scripts/test_single_user_assessments.py | 77 + scripts/validate_dom_locators.py | 320 + scripts/verify_all_tests_independent.py | 155 + scripts/verify_conditional_attributes.py | 277 + scripts/verify_current_dom.py | 578 ++ scripts/verify_data_testid_implementation.py | 451 ++ scripts/verify_toast_dom_direct.py | 205 + scripts/verify_ui_team_implementation.py | 356 + ...ts_with_passwords_2025-12-08T08-04-09.xlsx | Bin 0 -> 32618 bytes ...nts_with_passwords_2025-12-10T12-00-33.csv | 51 + ...nts_with_passwords_2025-12-12T13-19-32.csv | 501 ++ tests/README.md | 171 + tests/component_tests/__init__.py | 8 + .../test_01_login_component.py | 98 + .../test_02_password_reset_component.py | 148 + .../test_03_profile_tabs_component.py | 136 + tests/conftest.py | 175 + tests/load_tests/LOAD_TEST_USAGE.md | 229 + tests/load_tests/__init__.py | 0 tests/load_tests/test_generic_load.py | 264 + .../test_generic_load_assessments.py | 659 ++ tests/student_assessment/README.md | 233 + tests/student_assessment/__init__.py | 15 + tests/student_assessment/conftest.py | 135 + .../test_01_assessments_page.py | 153 + .../test_02_domains_page.py | 193 + .../test_03_domain_assessment.py | 610 ++ .../test_04_domain_feedback.py | 218 + .../test_05_final_feedback.py | 188 + .../test_06_complete_assessment_flow.py | 359 + tests/student_authentication/__init__.py | 14 + tests/student_authentication/test_01_login.py | 133 + .../test_02_password_reset.py | 176 + .../student_authentication/test_03_logout.py | 170 + .../test_04_complete_student_flow.py | 119 + tests/student_profile/__init__.py | 14 + ...st_profile_completion_with_student_data.py | 234 + tests/student_profile/test_profile_filling.py | 281 + utils/__init__.py | 9 + utils/driver_manager.py | 246 + utils/file_handlers.py | 91 + utils/load_test_base.py | 421 ++ utils/load_test_runner.py | 237 + utils/password_tracker.py | 71 + utils/question_answer_helper.py | 435 ++ utils/randomized_wait.py | 210 + utils/smart_wait_optimizer.py | 255 + utils/student_data_manager.py | 195 + utils/wait_helpers.py | 132 + 210 files changed, 61469 insertions(+) create mode 100644 .cursorrules create mode 100644 .gitignore create mode 100644 .~lock.students_with_passwords_2025-12-08T08-04-09.xlsx# create mode 100644 CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-56-42.xlsx create mode 100644 CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-56-53.xlsx create mode 100644 CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-57-04.xlsx create mode 100644 CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-57-13.xlsx create mode 100644 CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-58-21.xlsx create mode 100644 CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-59-09.xlsx create mode 100644 CognitivePrism/my-project/COMPLETE_MISSING_LOCATORS_LIST.md create mode 160000 CognitivePrism/my-project/CP_08_dec_legacy/cognitive-prism-academia-backend create mode 100644 CognitivePrism/my-project/CP_08_dec_legacy/cognitive-prism-assesment-ui/.vite/deps/_metadata.json create mode 100644 CognitivePrism/my-project/CP_08_dec_legacy/cognitive-prism-assesment-ui/.vite/deps/package.json create mode 160000 CognitivePrism/my-project/CP_20_Nov_Auth_profile/cognitive-prism-academia-backend create mode 160000 CognitivePrism/my-project/CP_20_Nov_Auth_profile/cognitive-prism-assesment-ui create mode 100644 CognitivePrism/my-project/backup_docs/AUTOMATION_LOCATORS.md create mode 100644 CognitivePrism/my-project/backup_docs/MISSING_ATTRIBUTES_LIST.md create mode 100644 CognitivePrism/my-project/backup_docs/QUICK_REFERENCE_DATA_TESTID.md create mode 100644 CognitivePrism/my-project/backup_docs/REQUIRED_DATA_TESTID_ATTRIBUTES.md create mode 100644 CognitivePrism/my-project/backup_docs/TEMPORARY_LOCATORS_TO_REPLACE.md create mode 100644 CognitivePrism/my-project/backup_docs/UI_CODE_ANALYSIS.md create mode 100644 CognitivePrism/my-project/backup_docs/UI_DEV_TEAM_REQUIREMENTS.md create mode 100644 CognitivePrism/my-project/backup_docs/UI_DEV_TEAM_REQUIREMENTS_COMPLETE.md create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 1. Cognitive Flexibility.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 2. Response Inhibition.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 3. Memory.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 4 Attention - Color Stroop Task.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 5 Working Memory- Sternberg Paradigm.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 5 Working Memory- Sternberg Paradigm.txt create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 6 Reasoning.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Cognition - 7 Problem Solving Abilities_5 tasks.pdf create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/FRONTEND_IMPLEMENTATION_PLAN.md create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/RIT.md create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/VPAM.md create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/VPSM.mdc create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/VPSM_FINAL_REPORT.md create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/VPSM_IMPLEMENTATION_CHECKLIST.md create mode 100644 CognitivePrism/my-project/cognitive-docs/Doc/vpam_rules.md create mode 160000 CognitivePrism/my-project/cognitive-prism-academia-backend create mode 160000 CognitivePrism/my-project/cognitive-prism-assesment-ui create mode 100644 CognitivePrism/my-project/docTracks/00_INDEX.md create mode 100644 CognitivePrism/my-project/docTracks/01_CODE_EVIDENCE_STATUS.md create mode 100644 CognitivePrism/my-project/docTracks/02_PATTERN_RULES.md create mode 100644 CognitivePrism/my-project/docTracks/03_VERIFICATION_SCRIPT.md create mode 100644 CognitivePrism/my-project/docTracks/04_ATTRIBUTE_VERIFICATION_REPORT.md create mode 100644 CognitivePrism/my-project/docTracks/05_CODE_EVIDENCE_ATTRIBUTE_COUNT.md create mode 100644 CognitivePrism/my-project/docTracks/06_MANDATORY_RESET_VERIFICATION.md create mode 100644 CognitivePrism/my-project/docTracks/07_IMPLEMENTATION_SUMMARY_FOR_AUTOMATION_TEAM.md create mode 100644 CognitivePrism/my-project/docTracks/08_HONEST_STATUS_REPORT.md create mode 100644 CognitivePrism/my-project/docTracks/09_BROWSER_VERIFICATION_SCRIPT.md create mode 100644 CognitivePrism/my-project/docTracks/10_FINAL_IMPLEMENTATION_STATUS.md create mode 100644 CognitivePrism/my-project/docTracks/11_AUTOMATION_TEAM_CLAIMS_VERIFICATION.md create mode 100644 CognitivePrism/my-project/docTracks/12_READINESS_ASSESSMENT.md create mode 100644 CognitivePrism/my-project/docTracks/13_IMPLEMENTATION_PROGRESS.md create mode 100644 CognitivePrism/my-project/docTracks/14_COMPLETE_IMPLEMENTATION_VERIFICATION.md create mode 100644 CognitivePrism/my-project/docTracks/15_READINESS_FOR_NEXT_REQUIREMENTS.md create mode 100644 CognitivePrism/my-project/docTracks/16_MISSING_ATTRIBUTES_IMPLEMENTATION.md create mode 100644 CognitivePrism/my-project/dom_validation_results.json create mode 100644 CognitivePrism/my-project/students_with_passwords_2025-12-12T13-19-32.xlsx create mode 100644 config/__init__.py create mode 100644 config/config.py create mode 100644 config/load_test_config.py create mode 100644 config/test_data.py create mode 100644 documentation/ORGANIZATION_COMPLETE.md create mode 100644 documentation/README.md create mode 100644 documentation/STRUCTURE.md create mode 100644 documentation/automation-status/100_PERCENT_COMPLETION_STATUS.md create mode 100644 documentation/automation-status/100_PERCENT_COMPLETION_VERIFICATION.md create mode 100644 documentation/automation-status/AUTOMATION_UPDATES_SUMMARY.md create mode 100644 documentation/automation-status/COMPLETE_CONTEXT_AND_STATUS.md create mode 100644 documentation/automation-status/COMPLETE_PLATFORM_EXPLORATION.md create mode 100644 documentation/automation-status/COMPLETE_TEST_EXECUTION_REPORT.md create mode 100644 documentation/automation-status/COMPLETE_VERIFICATION_AND_IMPROVEMENTS.md create mode 100644 documentation/automation-status/COMPREHENSIVE_IMPLEMENTATION_ANALYSIS.md create mode 100644 documentation/automation-status/COMPREHENSIVE_REVIEW_AND_FIXES.md create mode 100644 documentation/automation-status/COMPREHENSIVE_TEST_ANALYSIS.md create mode 100644 documentation/automation-status/FINAL_100_PERCENT_COMPLETION_REPORT.md create mode 100644 documentation/automation-status/FINAL_GAP_ANALYSIS_100_PERCENT_COMPLETION.md create mode 100644 documentation/automation-status/FINAL_OBSERVATIONS_AND_IMPROVEMENTS.md create mode 100644 documentation/automation-status/FINAL_REVIEW_SUMMARY.md create mode 100644 documentation/automation-status/FINAL_TESTING_REPORT.md create mode 100644 documentation/automation-status/FINAL_VERIFICATION_STATUS.md create mode 100644 documentation/automation-status/HOW_IT_WORKS_STUDENT_DATA.md create mode 100644 documentation/automation-status/LOCATOR_UPDATE_SUMMARY.md create mode 100644 documentation/automation-status/MANDATORY_RESET_FLOW_STATUS.md create mode 100644 documentation/automation-status/OPTIMIZATION_COMPLETE.md create mode 100644 documentation/automation-status/OPTIMIZATION_RESULTS.md create mode 100644 documentation/automation-status/PASSWORD_RESET_FIX_SUMMARY.md create mode 100644 documentation/automation-status/PASSWORD_RESET_IMPROVEMENTS.md create mode 100644 documentation/automation-status/PERFORMANCE_ANALYSIS.md create mode 100644 documentation/automation-status/PERFORMANCE_OPTIMIZATION_PLAN.md create mode 100644 documentation/automation-status/PROFILE_COMPLETION_FIXED.md create mode 100644 documentation/automation-status/RANDOMIZED_WAIT_IMPLEMENTATION.md create mode 100644 documentation/automation-status/STUDENT_DATA_MANAGEMENT_SOLUTION.md create mode 100644 documentation/automation-status/TESTING_STATUS_AND_ANSWERS.md create mode 100644 documentation/automation-status/TEST_EXECUTION_OBSERVATIONS.md create mode 100644 documentation/automation-status/TEST_OBSERVATION_AND_ANALYSIS.md create mode 100644 documentation/automation-status/UI_TEAM_IMPLEMENTATION_VERIFICATION.md create mode 100644 documentation/automation-status/UI_TEAM_IMPLEMENTATION_VERIFIED.md create mode 100644 documentation/automation-status/VERIFICATION_AND_COMPLETION_SUMMARY.md create mode 100644 documentation/automation-status/WORLD_CLASS_ASSESSMENT_AUTOMATION_COMPLETE.md create mode 100644 documentation/automation-status/WORLD_CLASS_ASSESSMENT_AUTOMATION_READY.md create mode 100644 documentation/automation-status/WORLD_CLASS_AUTOMATION_COMPLETE.md create mode 100644 documentation/automation-status/WORLD_CLASS_AUTOMATION_READY.md create mode 100644 documentation/automation-status/WORLD_CLASS_WAIT_OPTIMIZATION.md create mode 100644 documentation/debug-tools/WORLD_CLASS_DEBUG_APPROACH.md create mode 100644 documentation/quick-references/QUICK_REFERENCE_MANDATORY_RESET.md create mode 100644 documentation/ui-team-requirements/COMPLETE_UI_TEAM_REQUIREMENTS.md create mode 100644 documentation/ui-team-requirements/FINAL_COMPLETE_DATA_TESTID_REQUIREMENTS.md create mode 100644 documentation/ui-team-requirements/MISSING_ATTRIBUTES_FINAL_REQUIREMENTS.md create mode 100644 documentation/ui-team-requirements/README.md create mode 100644 documentation/ui-team-requirements/UI_TEAM_DATA_TESTID_REQUIREMENTS.md create mode 100644 documentation/ui-team-requirements/UI_TEAM_IMPLEMENTATION_REVIEW.md create mode 100644 documentation/ui-team-requirements/UI_TEAM_MANDATORY_RESET_DATA_TESTID.md create mode 100644 documentation/ui-team-requirements/UI_TEAM_QUICK_REFERENCE.md create mode 100644 documentation/verification-reports/DOM_VERIFICATION_REPORT.json create mode 100644 documentation/verification-reports/FINAL_VERIFICATION_SUMMARY.md create mode 100644 documentation/verification-reports/FINAL_VERIFICATION_UI_TEAM_CLAIMS.md create mode 100644 documentation/verification-reports/IMPLEMENTATION_VERIFICATION_REPORT.md create mode 100644 documentation/verification-reports/UI_TEAM_CLAIMS_VERIFICATION.md create mode 100644 pages/__init__.py create mode 100644 pages/age_verification_modal.py create mode 100644 pages/assessments_page.py create mode 100644 pages/base_page.py create mode 100644 pages/dashboard_page.py create mode 100644 pages/domain_assessment_page.py create mode 100644 pages/domain_feedback_page.py create mode 100644 pages/domains_page.py create mode 100644 pages/feedback_survey_page.py create mode 100644 pages/login_page.py create mode 100644 pages/mandatory_reset_page.py create mode 100644 pages/profile_editor_page.py create mode 100644 pages/profile_incomplete_page.py create mode 100644 pages/student_nav_page.py create mode 100644 pytest.ini create mode 100644 scripts/ADVANCED_LOAD_TEST_README.md create mode 100644 scripts/LOAD_TEST_ISSUES_FIXED.md create mode 100644 scripts/LOAD_TEST_README.md create mode 100644 scripts/QUICK_START_LOAD_TEST.md create mode 100644 scripts/README.md create mode 100755 scripts/RUN_LOAD_TEST_500_STUDENTS.sh create mode 100644 scripts/check_profile_tabs.py create mode 100755 scripts/complete_journey_test.py create mode 100755 scripts/complete_profile_and_analyze.py create mode 100755 scripts/complete_profile_to_assessment.py create mode 100755 scripts/comprehensive_dom_verification.py create mode 100644 scripts/debug_dom_inspector.py create mode 100644 scripts/debug_password_reset.py create mode 100644 scripts/debug_question_29.py create mode 100644 scripts/debug_question_detection.py create mode 100644 scripts/diagnose_issues.py create mode 100755 scripts/generate_synthetic_data.py create mode 100644 scripts/load_test_e2e_assessment.py create mode 100644 scripts/load_test_e2e_assessment_advanced.py create mode 100755 scripts/process_students.py create mode 100644 scripts/profile_data_example.json create mode 100644 scripts/quick_dom_check.py create mode 100755 scripts/test_complete_flow.py create mode 100644 scripts/test_complete_student_journey.py create mode 100755 scripts/test_profile_filling_with_screenshots.py create mode 100755 scripts/test_single_student.py create mode 100755 scripts/test_single_user_assessments.py create mode 100755 scripts/validate_dom_locators.py create mode 100755 scripts/verify_all_tests_independent.py create mode 100644 scripts/verify_conditional_attributes.py create mode 100755 scripts/verify_current_dom.py create mode 100644 scripts/verify_data_testid_implementation.py create mode 100644 scripts/verify_toast_dom_direct.py create mode 100644 scripts/verify_ui_team_implementation.py create mode 100644 students_with_passwords_2025-12-08T08-04-09.xlsx create mode 100644 students_with_passwords_2025-12-10T12-00-33.csv create mode 100644 students_with_passwords_2025-12-12T13-19-32.csv create mode 100644 tests/README.md create mode 100644 tests/component_tests/__init__.py create mode 100644 tests/component_tests/test_01_login_component.py create mode 100644 tests/component_tests/test_02_password_reset_component.py create mode 100644 tests/component_tests/test_03_profile_tabs_component.py create mode 100644 tests/conftest.py create mode 100644 tests/load_tests/LOAD_TEST_USAGE.md create mode 100644 tests/load_tests/__init__.py create mode 100644 tests/load_tests/test_generic_load.py create mode 100644 tests/load_tests/test_generic_load_assessments.py create mode 100644 tests/student_assessment/README.md create mode 100644 tests/student_assessment/__init__.py create mode 100644 tests/student_assessment/conftest.py create mode 100644 tests/student_assessment/test_01_assessments_page.py create mode 100644 tests/student_assessment/test_02_domains_page.py create mode 100644 tests/student_assessment/test_03_domain_assessment.py create mode 100644 tests/student_assessment/test_04_domain_feedback.py create mode 100644 tests/student_assessment/test_05_final_feedback.py create mode 100644 tests/student_assessment/test_06_complete_assessment_flow.py create mode 100644 tests/student_authentication/__init__.py create mode 100644 tests/student_authentication/test_01_login.py create mode 100644 tests/student_authentication/test_02_password_reset.py create mode 100644 tests/student_authentication/test_03_logout.py create mode 100644 tests/student_authentication/test_04_complete_student_flow.py create mode 100644 tests/student_profile/__init__.py create mode 100644 tests/student_profile/test_profile_completion_with_student_data.py create mode 100644 tests/student_profile/test_profile_filling.py create mode 100644 utils/__init__.py create mode 100644 utils/driver_manager.py create mode 100644 utils/file_handlers.py create mode 100644 utils/load_test_base.py create mode 100644 utils/load_test_runner.py create mode 100644 utils/password_tracker.py create mode 100644 utils/question_answer_helper.py create mode 100644 utils/randomized_wait.py create mode 100644 utils/smart_wait_optimizer.py create mode 100644 utils/student_data_manager.py create mode 100644 utils/wait_helpers.py diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000..7dc1630 --- /dev/null +++ b/.cursorrules @@ -0,0 +1,236 @@ +# Cognitive Prism Automation Testing - Cursor Rules & Best Practices + +## Core Principles +- **Zero Tolerance for Assumptions**: Never assume, always verify +- **100% Confidence**: Only document/implement what we're 100% certain about +- **Concrete Locators Only**: Use stable, permanent locators (ID, Name, data-testid) - avoid CSS, dynamic classes, XPath with text when possible +- **Best Practices Always**: Follow industry best practices for automation testing +- **Perfectionist Approach**: Every line of code must be production-ready + +## Locator Strategy (CRITICAL) + +### āœ… ALLOWED Locators (Priority Order) +1. **data-testid** - `By.CSS_SELECTOR, "[data-testid='value']"` - **PRIMARY** - Most stable, standardized in local +2. **ID** - `By.ID` - If unique and static +3. **Name** - `By.NAME` - If unique and stable +4. **XPath with ID/Name** - `By.XPATH, "//*[@id='value']"` - As fallback only +5. **XPath with stable attributes** - Only if above not available + +### āŒ FORBIDDEN Locators +- **CSS Selectors** - Unless using data-testid +- **Dynamic Classes** - Classes that change (e.g., `class="button-1234"`) +- **XPath with text** - `//button[text()='Click']` - Only use if absolutely necessary +- **XPath with position** - `//div[1]`, `//div[last()]` - Fragile +- **XPath with contains(text())** - Only as last resort +- **Dynamic IDs** - IDs that change on each load + +### data-testid Naming Convention +- Format: `scope__element_name` +- Scopes: `student_login`, `mandatory_reset`, `profile_incomplete`, `profile_editor`, `student_nav`, `assessment_card`, `domains_page`, `domain_card`, `domain_assessment`, `domain_question`, `domain_feedback`, `domains_final_feedback`, `feedback_survey` +- Dynamic elements: `assessment_card__{assignmentId}_action`, `domain_card__{domainId}_action`, `domain_question__{questionId}__option_{label}` + +## Code Quality Standards + +### Python Best Practices +- Follow PEP 8 style guide strictly +- Use type hints where possible +- Maximum line length: 100 characters +- Use descriptive variable and function names +- Always include docstrings for classes and methods + +### Page Object Model (POM) +- One page object per page/section +- All locators must be class-level constants +- All page interactions must go through page objects +- Never use WebDriver directly in test files +- Page objects should return other page objects for navigation + +### Wait Strategies +- **ALWAYS** use explicit waits - never use `time.sleep()` except for specific timing requirements +- Use `WebDriverWait` with appropriate expected conditions +- Wait for element visibility before interaction +- Wait for page load completion +- Handle loading states explicitly + +### Test Structure +- One test class per feature/page +- Use descriptive test method names: `test__` +- Tests must be independent - no dependencies between tests +- Use pytest fixtures for setup/teardown +- Use pytest markers appropriately + +### Error Handling +- Use try-except blocks only when necessary +- Log errors appropriately +- Take screenshots on failures +- Provide meaningful error messages +- Never swallow exceptions silently + +## File Organization + +### Directory Structure +``` +pages/ - Page Object Model classes +tests/ - Test cases +utils/ - Utility classes +config/ - Configuration files +reports/ - Test reports +logs/ - Test logs +downloads/ - Downloaded files +``` + +### Naming Conventions +- **Files**: `snake_case.py` +- **Classes**: `PascalCase` +- **Methods/Functions**: `snake_case` +- **Constants**: `UPPER_SNAKE_CASE` +- **Variables**: `snake_case` + +## Documentation Requirements + +### Code Documentation +- Every class must have a docstring +- Every public method must have a docstring +- Document parameters and return values +- Include usage examples for complex methods + +### Test Documentation +- Document test purpose in docstring +- Explain any test data requirements +- Document expected behavior +- Note any known limitations + +## Testing Standards + +### Test Data +- Use configuration files for test data +- Never hardcode credentials (use environment variables) +- Use fixtures for test data setup +- Clean up test data after tests + +### Assertions +- Use meaningful assertion messages +- Verify multiple aspects when possible +- Use appropriate assertion methods +- Don't over-assert, but don't under-assert + +### Test Execution +- Tests must be able to run independently +- Tests should be idempotent +- Handle cleanup in fixtures +- Support parallel execution where possible + +## Environment Configuration + +### Local vs Live +- **Default**: LOCAL environment (`localhost:3983`) +- Switch to live only after local automation is complete +- Use `ENVIRONMENT` variable to switch: `local` or `live` +- All URLs are dynamic based on environment + +## Security Best Practices + +### Credentials +- Never commit credentials to repository +- Use environment variables or .env files +- Use .gitignore for sensitive files +- Rotate test credentials regularly + +### Data Privacy +- Don't log sensitive information +- Clean up test data after execution +- Respect data privacy regulations + +## Performance Considerations + +### Test Execution Speed +- Minimize unnecessary waits +- Use appropriate wait timeouts +- Optimize locator strategies +- Avoid redundant operations + +### Resource Management +- Always quit WebDriver instances +- Clean up temporary files +- Release resources in fixtures +- Monitor memory usage + +## Maintenance Guidelines + +### Code Reviews +- All code must be reviewed +- Follow consistent coding style +- Ensure all tests pass +- Verify documentation is updated + +### Refactoring +- Refactor when code duplication occurs +- Improve locators when better options available +- Update documentation with changes +- Maintain backward compatibility when possible + +## Specific Rules for This Project + +### Cognitive Prism Platform (Local) +- All locators use `data-testid` attributes (standardized in local) +- Document all findings in analysis documents +- Update locators if platform changes +- Follow exact student journey flow: + 1. Sign-In (student_login) + 2. Password Reset (mandatory_reset) - if first login + 3. Profile Completion (profile_incomplete) - if incomplete + 4. Profile Editor (profile_editor) - complete to 100% + 5. Assessments (assessment_card) + 6. Domains (domains_page, domain_card) + 7. Domain Assessment (domain_assessment, domain_question) + 8. Domain Feedback (domain_feedback) + 9. Final Feedback (domains_final_feedback, feedback_survey) + +### Test Flows +- Complete flows must be documented before automation +- Handle all test phases (password reset, profile completion, assessments, domains, questions, feedback) +- Verify export functionality where applicable + +### Framework Requirements +- Use pytest as test runner +- Use Page Object Model pattern +- Use explicit waits exclusively +- Support multiple browsers +- Generate HTML reports + +## Common Pitfalls to Avoid + +1. **Fragile Locators**: Don't use locators that break easily +2. **Hard-coded Waits**: Don't use time.sleep() unnecessarily +3. **Duplicate Code**: Refactor common functionality +4. **Missing Documentation**: Document all code +5. **Incomplete Error Handling**: Handle errors appropriately +6. **Test Dependencies**: Keep tests independent +7. **Ignoring Best Practices**: Always follow best practices +8. **Assumptions**: Never assume, always verify + +## Quality Checklist + +Before committing code, ensure: +- [ ] All locators use data-testid (or fallback to ID/Name) +- [ ] No hard-coded waits (except specific timing needs) +- [ ] All code has docstrings +- [ ] All tests pass +- [ ] Code follows PEP 8 +- [ ] No duplicate code +- [ ] Error handling is appropriate +- [ ] Screenshots on failure are working +- [ ] Documentation is updated +- [ ] No sensitive data in code + +## Continuous Improvement + +- Regularly review and update locators +- Refactor code for better maintainability +- Update documentation as needed +- Stay updated with best practices +- Verify all locators match local implementation standards + +--- + +**Remember**: We are building a world-class automation framework. Every line of code must reflect this commitment to excellence. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..717e109 --- /dev/null +++ b/.gitignore @@ -0,0 +1,66 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual Environment +venv/ +env/ +ENV/ +.venv + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Testing +.pytest_cache/ +.coverage +htmlcov/ +.tox/ +.hypothesis/ + +# Reports and Logs +reports/ +logs/ +downloads/ +screenshots/ + +# Environment variables +.env +.env.local + +# OS +.DS_Store +Thumbs.db + +# Selenium +*.log +geckodriver.log +chromedriver.log + + + + + + diff --git a/.~lock.students_with_passwords_2025-12-08T08-04-09.xlsx# b/.~lock.students_with_passwords_2025-12-08T08-04-09.xlsx# new file mode 100644 index 0000000..6b4dfd7 --- /dev/null +++ b/.~lock.students_with_passwords_2025-12-08T08-04-09.xlsx# @@ -0,0 +1 @@ +,tech4biz,tech4biz-MS-7D99,08.12.2025 13:39,file:///home/tech4biz/.config/libreoffice/4; \ No newline at end of file diff --git a/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-56-42.xlsx b/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-56-42.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6e5f81423b99f3ab838f47d0c4d9254f94f1e290 GIT binary patch literal 104359 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 literal 0 HcmV?d00001 diff --git a/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-56-53.xlsx b/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-56-53.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6e5f81423b99f3ab838f47d0c4d9254f94f1e290 GIT binary patch literal 104359 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 literal 0 HcmV?d00001 diff --git a/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-57-04.xlsx b/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-57-04.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6e5f81423b99f3ab838f47d0c4d9254f94f1e290 GIT binary patch literal 104359 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 literal 0 HcmV?d00001 diff --git a/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-57-13.xlsx b/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-57-13.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6e5f81423b99f3ab838f47d0c4d9254f94f1e290 GIT binary patch literal 104359 zcmeIb+mB<*e&09SItheh2$CQxFbo(VdiK`CHuf~vTD-0C%xIIGzOuLzD+>BCFU^tKJivS1uUNq{(Z5Iq<$90LvzBoSa6(S!1$e;|2EfB^Q3E{5#{dNyFd z{?%H%^s4nK_Ub+xHf-x0%x*UO^Q)>=tE#?r`BhcD@>4(fGcT6^`+Hyf#_#;2KlS2; z`uFGL%g=-DU!C}a>Gr4b0eJ!d7ZJ^G027Fdq4Dx9?$CIHqlV2w{+qYilqj%$P+v#*}TT-wNW9wZc%+x{m?bhU= zYi*@k_qP)B<6)1lulpVU{kSt9`lA^{5j_92=le4W)SKM+v$tC+OMon# zKM3E6rP(c&N?CW2mN3u&3O{CId?B676zvEfKp~%v@tIPwT+T)K01EkBjNi?>xlEJ~ zpx&TA`WU0t3*FsaguX(q$Af*u3xXHY3w%vUX;_sm6~*;dmSmoWp8*j>3b>y@3rqe_)GXzXBzuT#g&?NCjDD!aSv}jsS)e&{`hzQmp}g9 ze~|j)-~H|1|Mh?P`@jCb|NdY5Yrp^N|63SV#Bkpm-8?k>7k~f1{r~>u>(S|MA~3C^cve{?UK`+yC?*{`MdJ5C6?S`=9?N;Khk|^$>6M zhyFBG^FO5;+sT*;4SUV9>q2Z4L@ z50SJsdz1OB4>4DI!w6U%j|Zjk1T&zb;(Cz7t@-GNBcIG4at+VBqqxi7DDrA|=C{&n zE(>KO@5?kKXF8KNed7Ij@A(MySxW)WPIK2zUoP? z+l|K?g46y@BuVQ6qW&_UK(hAyaishp zdd;4vCQz(k7CLMf@VXH``?>`Gin^`pu30sb-H>-}j;n$A(dO6%! z1rwy|CK%H$BXU##Nh5Rei$LYso)ej+5|ubMD@a<5O>;Una4ZW8md$QMtPO{5`*-#Z!k5((}50_=+N5Kgdlhcz4Sp z6nj4PcwrfNT5hg#O)~BAL#YNLM}%Z{?*;RbS8>+{mP8XEq5-?W1)usHE#BcDYnpGI?RBFp+9}JDJYjd(&R{ z4ud}}Ue#cvVhYo5XEUm>eLoKXjY+apI0Y#p|ISh&WhDA){p)MLGkf^5AAFb0=d=PY{N5Yf z_Pj-Fsb*)EH7>-1qPj{$@Y{pr$+KbFgNJ+iqo^AHeLc#5H7qdK2HTOS2S|zDEMH7Sa<2IamY~l&A;Eo!*AYzVh$Z3fYZ;_U4C7od%__y702`jTal-8F}<#(C?t0V@w745i$ z_JR3QBOgA9`op@Hlv&n_i1@kgBC2O5A&CG#(Au!YiaoKNT_#T6V*H8a%T<5oR_1|H z>OZ1?{Yhuw2gO(kYHQq(wlyWo4`KeLq*Q;SS~V#_s(}nYT}i(u{4y*|DyT4P7oAg; zYfG{Io_j&7c(u${DNFLcpP1RJPE<6yNL~CsGkcN4k-QGSGiJ5CS-pzNSJ%sNNbq8U zg|3HdQRAx*@}l3%tp9uvu1-yF<+q?7+}0;S>AD(s?-w5j(@=23Qm4i+iX4m@{&lL~ z{k$B1ta2i(Lg5O@vWpzh%1jlsm7zm}hN$6!SEiv_u8i%+jaL>y%+h49jDra^3P9G! z77e!=+6f;vvf)#!%C*d?!RRN+vIL3eEW?pc(ku%HiW^_lGqP;T9t9>0`}C;+4xredo`ZT#zXng?Rz)lkvEW!+e?eZ z2MM<0FS=sq*O9P4Uq2`fBGxJsRKZXmB|(diVR+#$D*T6`g<(GkR%O=HgH3(DUPR{I z-VW|-^Wl{*tIf(uXz^|%VJ=G1V~Kq{)Zkep^$)Trl0mCST{vIVRFY(MY?a)rd4C{1 zJ;)phv-^3S-9ay7=3Nc^pijJtMY6gZ>S=5B$G2PS&sD$MpAX#?Rqx-8Lsfmdwf-DZ znV>|i+a;|Xto+{J{jHz-l`meXe}6V?2hr8(`Ay;~xbLk+lrGKl8bsZZtSc+>BjwVT zn)uhU(qp|YRp6D_3`4lL#86D{Rg z0!#V%L`zYdz*2rb(K5fVl%G$u6ko+4PWkynOQ~{!rTl!Nr6qMbFjXI(YP%{%^5Lnr z%Yr2O_+;B(1maJuAQXih0=4ElRo?f1;Wr0#3o*M76NLf!WQ`WLjsSi($cUi2g zr}9!9AD$ZTvRv6uFITF`4eFr!@YHyh<;s3~ zxw4n#N_}{0yvuTBKfPSp%W|bYJTYEpS+3NFr`j&dmGks+dTK0GzvWw~+^m#gitgA#OE-itG}j2*_G)O?&8Rdm#cqP#O% z?v?*aFI&8~6^=A7{_4XHViQpq~F$T6wtc>(zY!eOiJ%Pm=Eo$)@ zj;C`++^7f9&~}Nt?aA0I%Iy(X3-%qzxN&wLrT2**34JGBd2gnLeL(b)tOL)*!7v)| zA)#KkI}zu(C|M!0982jDVUWfuao_cC)hs|X;u?|HGI8rq;w9wR4AC#+JDs@< zucfmdP0fkf1WH4L=;4^t-ZaCI_LiA8rTx@w0%>m(Ek$S|h+ zc!0*Uw1`bpe>9!-XX5-k9u=vg7O|;%U=^>lMQpVmm_P+CVhi@b=8`IN5nHmWv6QOg zNpmJMlS3`XurUjBEZ$ZWu{~?f=3RN=sdD|`y%svQYIP|QGWPDS*lkg*m2|1urBJ%0 z%Mg>UYO1y}3#bxN&ABwNJy9*0h4V(9*2a{{q$+MZ(U9L0W@V$$4nZB6WAi$*Z+qjx z{lJrrX2bqnzkB~G%+^PKah;r%Pv_lqCK~A;!3QJNa74j<0>w>Sd6191 zD0^UF=Qr~xct~Ku%B1#W!(gv3xqjnmeSiv?RK$aOsF%khA`L075^LuzyP&^hE{v-7!}6-{=F;JvYI4;`r;YN?&!?O=TGYqjH)tU~EEK0}*qqKP?s z965g+xp*A8B*aS3deQV0WkXoJ6)I{FHbPEbqp;oCmo_4G6gCp6wzLw#hLMz3w2Isq zA_*T2&m&k}K!`A}~N%fx~7 z5Ehdjf}SHi6pm4P2uA54uqXl{4OU%s4X0X7J0JtKr75OA1ZJF!W3CGoGHLgx-bZng z_GY32t8x&$_9NmqCB8}q`Hb!6v__yt;J&A{DAgQ)8s2-UqI6i+eWM^f$7JPZtXw|l z<_cPSUMILTpY}&G=#-s`(MLTYI@BWDs6}KW{^p}uKeadh)YU3SlW?~nU51>Mb+pvC z2qqCdB`_2qW5U~H6U~pa$C2~Lk&DNXOF~G1h|~Mo*#0=tCo5v(lT?2w6?t(SOqFFY z=HK|T3)a(0ZE=T;HdMRfE*Wg9cf~!jpo&-AC-R^i7bD_AG15i((1cp)_h}~`6C=WZ zG&nmg-d~Kqu20<6`-+HBW+g^4ml+eIhRovWO=*chsF-EqK#d5qw9>Uh&~wy?!ZE55 z!Kg+AZYo#@WPoZ!pg8+yH&l!Y+0?{=V?5D%*+)cfN_UkE@`Y?ZuNB@JfvW--s?Os` z{c+^vaisA$(tI3gJ&v3{j~&K^h3A4e`8M=l8|#D^$^#T0^|_z;Dtq!K~4ww=js zm>4Kxvw>BixJ%)0std(EvY^UP+$WMoD#V52ptXm^LlatPi8$mhqIIo^ZNj&=-&$Yi z)2+L`+|i1Uh(mTI4zgGk6NmNiCaBOQVp^$F@gYyu#Tm@&uObQfGV!}IK@poOBhb>i zzB>dxMaqn!{L z4ofWKu!L-yBVS54bbgvdyE!+TadPRbR-0P{*XEO{rq`#$g@Y1fvfE@6&9}41k@Lrq zi^q{mLM%HjImDHti7sMuqYd|p*v2GP97;td>*nQH9yz}Tha_aewX3*GELE@K9+6bP ziu**;D1^9BX!IP!MkbgNv&%9qwyV9B3Wa<)nB;y*4pjMzyZgg0vz-qsn~2!tR$?RG z4KcB4_diG*xUvithrov4?P?3~a*S3yKvWt6Ep2^dhoI*u4TWP=8iG-22&7_lK%hx! zh%Mv`a@f&)(&<4}sE|cP2J^az9U%zHSS2uHrEObZk0G#}s-&9ptDf5XT=m7U;=HWlwqX6_o^IGT0EZ>*oKU# zh81^_geq3tBa-S^ai2&U(hwIajn;cB9-2_MRZ80htrad}3)AbB@6Kw|Ky0Sz-u~)U zMwBMMQX27viz!Xr>kf6HAud)Q%S55f5Ezpgf}SHY6pm452u7J9P!4|Ui|dTn)zpTD#xG7 z4&i8S)Crb7de^ehGS&w)#D-FnHA)THM3c~b9BDm{oIZ}UA4kp}N6sHdE*?iN2?6aO ztQgI|Vu>Ja=Awx0MpEgZ2y)V7r<#FZT1q@ewNYeohitIY6n6waQHK?*Ac5l{P= zg2^+S!M#HaG@v5 zxu#oB^IAV9BiGIpWDt;bw0={aU^(A@7LybLLrKXQC53F>_tog7DefwAtT3r!ldRmV zlg)@9oU0Y&7QqHpJS8?9#TXx_n4Z z#1=>|g+*+8k}47LQVlUOMdFFKYX4(u z;k>%mzHq&Uj9@*Vu-JM&LC=vR3dbl%1fv`gh;wKJn&!}m&E~R>d2mA(mGO7-ieme0 zj*x{hew9F(Wx0kMU{=-@5f~2TDBt|Sy@+`G^rE3>rLe7vuLF_A#kx? zW1Np_kWnjDPwj~}tE}3HW3xD_YcVy+$QA#;tShTGb~ITnf}3)l`zLSWr*=j+;uNPp z$|>0_)^LoE(k7#5TFxFv&L2lE9!D+-0k;9dbl2PxLAuXgu}oA_H6q(g!Ew#*oW&io zG1R-_F2YdpihD#-%`5H`Nt0{D1;Zjsn@cDjn$SXPM-G^X`3n$!Rs3+UH*}iauTIt# zAtFL@Ucu6}Ssh&vlc8p`%$5);rWPKnY8a(!5L$o;As6!*KQjLZa$aJWD4R~5UpG-q-msg zie#us#z$zQQ8Wo>37GQ)%tZp`5*czXKrp6ENIC0vFX$4>j!!O*TbHuOg%Wjfc6+SR5IqPD^0gkRHWL$H?AoY3V9i*NmT$C`ga1qVI zMI_Gj;iH(Q`Vh8rS#g*%?q{o@kzv~5h+&v^s3KXA*|>B}vnVqbi%*L^V@MCk?c!&!@dxFD3V%L?5GxwCfhK1v{V7T|Qb!gZtkp zf(x}WCcTYT(FC6*V9paT7YUe4WWXH)xtP;7QhK`~!zwC@iN%VHl`y2Ld*G@nLPZ9K znkO=aG*ms2C_<_3i9`{)NurPsBq~0vGO=z;e7G~Z!y~su{o=vrOmq6u$=$7&tfCUN zKG;AV0veO3;^eNc?>#Re896;ATK3CmKr?`pg!s^ksAnk@1!PtzqFJGcWQ8Kqs89q; z2Yu6y>k4LlW!&k-MpYC#CAx}17OaAtc^rN3H6*Jk`TuH7Dt=VWFWjmAZ2tZXZCr7zbfj}#(55iYk$$AdaDhh4qwg%^<6NR04$J60 z#CF7DaJKfAMCmB7#7alT8P|3;`8bK*kr~uu(K;kq>j&K(jME^uj8SH@u` zRvnjMXX4{9;t#5`m-p%GTH#CYYSlJGMQ(jyf;z1_CUVu4Sx^m22vuaULYAJr4?KB@ z;lku0an|~rhadqvn1E*~97ShVIHFnMh%`9#9N^PbJo5fSG?Q`C=B3{X+OQ+i5weDK zR}q#WlB~T(3rr2k#VBmK)CC((kI_z)E?3AEoVe0arW=>I2o9yrH7gw%1xJvjs==vv z(dQOVD5y;`mb6`0rVh1I-9oz92`;OVlY*jQpCTRVoACkKXcP_jECF+#fVoJ(Tq0x1 z@yX;3h;XT_pZg~#pi;JHbRV`dVu@vn;&AP}yU8UGW8|tRIz=%U>Y@zGh^ERYQbj1a zVjvhUb7^H)q>2Jntko=)GdaymLZ%Ff_sfKOvkDGJxhW;ZPYS1|mNI(HQg`9au_ z@+!hv%g$%D1*jU5(&bl&IT(({Jw_Yx49w?j8Nz7uk#(eb1apGyVl-wvF|>hJ4cQ|+ z?8A0jq-8nMl0#pttX9igNOS5>kzI_xjHz#<)v757dVgmLnDYe8MFQp$8So55F21Zq z6$6&F2umzXWNfE5uWFHvq3($=5pAe^B1}Y6?Gs@l6vt2mhGQswFnWlADpq+3X6%b- z;Syn@u#ZZ|!T#I%^e}&L-CZBV85O7XaS!VDotQX*qzI>4C?ZAZrbR8}gGDW^{>dQ9#O@xH%63{`dE{2%ah^ds&qzmYJFIQMVpqxMdg+4V$zSurYF}I`L|Sg%NR5}UQp2b0_qNi_bkDp z=*)seGz%7yv_f=%k78WbqF{4!w1Ro2p@I>#dg3y8=gDE&vQ_9-j+4;O@J1_ofGUzs zwjf&~qs69%q)h#ZlWALaMQIz5j}e!>N-`D^k8rKR)R8v2+MOUCYL;;crGZ9DtQNcB zO#{Ow8oIWfmeT_Yjy5oCAg>z!tkaiY_j^|lJd~o+wLYanT{IdSVzpDXXsIqCwqfUf84XysC%fIbYLk3>E~mQr0s(snblk`!$_YDh+z;{;4S0dtaoX&@7B zr)qdNJx|7*(bP53LLOBn_2e7_&3&YWH1GPQml-OJZ9a(t!;hx;ECF+#fVoJ(Tq1)? zLyxPwK68_zkEKOvD6qszL&o_+&e}XWA}g*)qBR6lO%k0Ul&X^G457H@L}0MyWNV!x z84Q_N%Pyre&S|u4$(j@Kqr-#CQr~uOKYg{HEQkz-?Df$U@-Z$j`>A#`rV?Te|1LPj zjO(h*J3`Pn9zrta7J<}rga!jL3JuaIG)S5{H3w!on)inYio=j=?u=E?rabNsuRJ;2 z&X2}$gtRH)Riq1Y->KgI){tBs@tA^T&0{o?c|2KlO2=;Jts`ynd^R zk}{r54BRB{d!G$1688F-3i%k9tYBpzTAoV? zlD}=4$+(v}aNIgra=t<2&MKlW)k(=)KI>1N5OZt$Mvr9J}r-U{eZm&E-gG~=m zMGKjp%IW>t8j^ujEt~rABJ*frJ4Q2^B$VExC9Oo1t|N`7{UNy!E%R~aXw?k1#fLYU zgV%f$ja)06k-Kj*`f1TEr0Ee(kz6R2@e$f+70t%81k8B?<{|-ei41LtLNGRshg969 z53$6WMfKcPgR2eGco^e`$|$Nu(QK-XqFiJ`)lrm-P#S0<7%JC#926?ip^;UWo5MjB z$hY5rHwt9SJq&(aytLLktD*z0^??;O?mrIiqn6vc)waiIAupi?cs-R76+&$U*YsdtVz{o}gK%U$*g> zq6S(m?med-ToVmMyR3q1r}a7O7Sg6wD1;YtgT^Olqg6CZ&k``_37Crn%q21?UsNjM zBQBz{`f5ElNr~l);;_X9b(6=fjJe3nR24)jgeAGFuUSIEcsaBIEGDs=Kgs3;5Hcj}gd*ewlZ zw zV#}aEw|Q2OtPB-U1d3=w4HSVQnyR1(6rngLNMI;XTD22_GO_CBLMI>dkwAXwhPHbn&Cr5jG^eim+qL_&{5Sts%LeDyC$BKJ~hIX2UTW$-V53 z9O#qHYl{(eq|GZ=l#>gAGVVKSU>tJw@A70!_UA(@IiNt@_ARS$QF&+~jV=~QE+oqM z3~jWErr|6BbDn^?NWfeoLlQ-AEarcXp~VlJKrFFDQA+Z%lfXQiA!8^qGSos*D54G3 zP!x)2s)wRbgyIm2z)+#InkNcnVwJ~vChoIg<79DVbj)N z^x{L3`@>~qX$(cN$F}uiXwMQUiq0%jM6*Z{Y3K$W;L{k!P!z8CE}O5S!oc_ESFr=t z5i}&Zim)Z8o$E7kH6-OKCnc+D{1nXitqNr@KtDzsc`I34F8#=Ab)=3oZ7MoJa&wE)p=8$e4HNB2GJW5!Cyu;wV8?BC+0(aZc@b z+HlvXC=QuHr4qFv(om~JZHT67C2B+H2G?=s1J`k_na;iGTEDtX7ku86Oo$|Ud4px{Jfa$sQVD}Q zGjZF&F`BrpT<9S#aeAk>j`SnPot~i4Vw_~$Fw{URU5zL&qf9G7IHw7ib^_)s0dt;! zxk$iVB4b&zwX0URs$N7e?)gAjnbjtUMT7`TEJ9=)h>+pfbBv8@mFN$Jy{TG>2$2cZ zD-j_=aZ--JaLA+QaT<1W|Nm2_l*$h{#Pv?f@T&C5Xay|3&kBxXyZER zv^dmf^v+TX=?%+5^lle(ZW}!B$VxoGdZW4dMD{aGn%s8m%CdApAH$v_jSlY@h%V1C zw~dc+iFT$N;}I^k{EjYi+*axHyCPqdiHYTljK!D5cxwm7h80ruivr(NBSpW+gsPPVAY_6d^VV97D= zd2OK8V!&tc+-RbWE4OvX++$APrQAZ=v@~{#bSQD=r)Z;9w0xZ!TuU+6!Fwy82OR zB?JwpRF@HEv7-3(x#b-U?^$9+(V4}HXcj9XO~vg19|y&Xg0-x?vtgo-Ow^U3a>vxf zyA`L(_<|Ff7;X)%V&dg)xU?G^Xi>QJ)PCsOnKB$Ai{Z;wFgb!y9J95X+3HA}n*9@` z7vg1f%5I?5!mZp;1Da?fejRecQO?#qo?A$>KLq9JLb!}i(8lmrZ9~u_JxjoxCtxlT zFqg=XKLkCkKJUa$lU7hfuPCg(eLXW8Ak~?o5jo=n`U) zAr|d#k;Fsj;2?pV?&-9H)N_;z12QTX(x_ZW8rDS*3^3gtg=oQ&i`C5Aq0ojetT{r~ zknSqNxxAGtXiKg&B!j&Orju8X(ZtQ#xtuK?+FAs4q~Y${69gBlQf40sv}y*k=jK_s zCR({xPA*O;a(FOq;bH62znmDZgL2k~M99bZL>}I$i)6e1!Mm6H1g>YWG`l2GwPpa`X!Cjvz%&eRbY&eUngUWziA*n%uG+3`ztk-t28 zzjrSCpw7OsJF9XS9WJd;hj3`OZ*e5ouxagA2}zjXC?m+zbQF2)oIMQhS#m_tndOLR zmLnpKJ`wmhCXtk#t);$?r#Ww#nk(aeGx%A!1rL}=%3u&I) zqkIjO$uXwBjp0itvM0CJ(=Cx_XrP?!<W|_mfpJ3UiG`{m;#eBhD!r3 z3OepPLDaJpjsh|(9MPlIw4=`^G3sDrV2#ZnTh%XtA<};*YGV*4gz6@DKSZ+kt4ODh~sKS)U(uz0y3)= z(X3WP8p_uJ=8ZwEC|o;}-!!vc!SD@L;|O6x%Bu*g``q=z0%}NxzJ7do)-hU$P!$R} zC$F!F)saS5Kgz*{N|_I!z~Gm+t3~`=qb+_D4aGNIj+C`sOB+$PkfyC+r${a|%J>*< zw2G$qECF+#fVoJ(Tq0xCD0*}8Emat1E*pJH8C6kei4}^BU2zxMI9*6ahH5AZMYN$F zib4@h6;Tw5P*f-aLxs|&5oFfT#EL@g$M0 z+2oZ@Hn{EZ$ea!tF6*P^D$+SQ_Em3#Ye+U_H7K|!9%h@5(ZbDIX~)jEmbUS*jx-KL zP7qyamGM-C23l28a;)rpxVQ~;9BmDoXd=h%%HUJhKw|4z^pZ^bz)msjg;E(GqK#J3 zRG%ea&J!>f37AV{Y`M1O!q@MPDHahfmDkGOAMRLn<8FG`#3Hu8bE`fP@+rD#{oxYZL_=_qQPGSsFzFnKg=N)+izk2N)k< z?yw^u1uHiKnrFu=7`Wl!qr|!in4GaQbsSk21XD~ax($bO2C{ZVA=_ovjog}0_GwCbBPSOP*Cp2o&Jc*YNJmX z6A_kJXvo-B*NWDB*%QYue`I5*OQJSJ8!D5C4bfDaL~ID%kZMYH$<|3ACX4?K7wl;oSgcgjqGbk$}~i< z#MJgC`lg0sG>|i7t%4)FbhTBPI?{NIIg$&RG2WllK&$9+5~gGS&{R&#lL2g6#&ywJ z)I$1E2X%V0i=mP6nc5gtG&yGpnDYe8MFQp$88~19IsMoIZjKzS+=x_B)+LrIGPd)D zT&mgW$pM+EBRQr&nxir{9vitoGIT<0|ta0+m^xDgN|0{GIWHfDcx11Z6}}Bec5VAhC3Ya9;IV6 z5I^*6#kYID-4$v76yk0{Hho&@Tuz&GY$1&cOGt*AWKMh= zt%9S?QgQeBGo)QN?>Ool4{ca-j`SnadVxku7eDiZT%sNAwn8wbW=QFsha$IKN!1MF zC`c7CPhu2z&3KgkUgpr(Y{tXQ*q^e?@d?Hg#LXPDC-%88e4|K@Sde-6rEYm zh-N(_(y-!rfKS6d6Nt(jU&h?qtDucxZ~PI$hJ;rUmc!h0d9BT^AsHEFKY3Xdaa{l?M3_O!>V(oE?om8P1x>tk0T|kMYU9cB(D|()eNL2(uO|LQb5}z$aLI#R zu*XPC_uiI!66HXpXxMe6&5}gfw^)fXo~_!zII2=7ile!j0DvuiO|)@sOOD~lr1hQ8 zEu@Xxkxvm{EIt_@qm5S4>^w`roF`x|5-^v@kTTIri|xq8(Bel;AeLB}C?#1-&gwHB z)-1wAMuzGqgC?Y*{>g}mP^y3;PK0h)fMPyafYSO?GG~Wj2O6~_r%vb#R@@x@=%Ssr ziy!;LuhQ!lDLQakpE{ADjlJP1N73S3LXvk^mXT$NqWI&BP((dTq9`D5 zyfX6`tz1iv!xL$Cv>B;7(uR$>$S%fE=4+(Ts^N7-t76_kO@zgpDjOT>TOX}#PTJBMzryS^AP zDpc$9BQms^w?6Uie1Gi+xR~cdv_BZ=H|LcxP@3MO5cQ$@4u9t3?>rlBlff zmutzS9bt(Dhm2+UX0s;)8Bv82tw9uOl;{khRHZ~`2;DR;LSBuF^y{-lZcMD~t1V_T z&1j)7R**k=Ik%6`-Hx5UUmHZ_W_|KQhIZywDspJ?}}FA7KV?zuTBwN433Ns&_=6hBF+*p=LwjL1k5EeI5?twj4v<|1=DzhCDtl3 z&f2oTWZv$CkNLeS|0?Fp-sBQk?eI^nJz|01fpIMNP{EdVq0r5ea})Wiq5Q7M6+5E zx#<-B1AHXhUyG!)dWPNS734SE0dRx{n-X6|i+nztbG2!z8j`Z)q~`JPNV;RRaPt{C zWg;z&eY8N}idp ztTd6qh8ifNDzeyA1x2OEgzBKE6rr0&SI7sWE3JNuSee*Dt0X6MT|~>HjIN0PeDAcb zzqI?MmzDKoNK~xW=Rss>=kT8FHk23pnR`jGmh9~{&kJNUSXCaxpLkFX_kdkWEUJCz*8jL+8s?xr{2*`s9cVZSCD(nJtD=1eH_EW1BY|h*`$)c`}e9iBAR+ z^(?)jfXsSDH0u?Sy!J$-aqWrVLVlwUADI*f-tF!DJAL2v5xyr%b`?oClM~1gI3A}9xr zJH~nL3Yy^F@*_k|iLN5;%6+j}tti)!TpW-W-|cpcxa$^VR#2U$5Y3W0(#9nwq!*KS z#z92`t)wq7=zsL+;-n@TNZTQISGjq8Gk6PWlqDn=vSdtt8?B<*c$R=UPrzIxU@noN zo0|}PA5D3YTO|GLtYR4hODaofEUy1XSwaJ>cEw#}P4%w0hd5Qd;y$7q=IfXb=IgWt ziJXI3SmS(S*S-p>I(ifQzNa9(DRH%${%&HRRA%h`JO(FW%jZC$wqBk#%)=32S0BTbk3oglf;CgUEU23plq z`>CK}q^j@)O|+4F{qmV?HlxdT3u%@oDqjnEGCn~Y!;j|qSpw!f0dtXnxkLumm5_`1 zh9jj9#zmbd>k_LI8C%lP*m%V|MhO*A1d76^c0cJ7OwsWK(ptn8k$(5h)<=VJ+Z~8Z*@x<@$OeW*WH2Q05 zG#_61ljckT#c9j`JbSyPlJ}#DfBkl=XuU3~MsWMxn{6$W?N8&$#~_k-^~z8E;Lp5R z{_nr|wHJT&$3OMrh5Gli^5y5j_RybsT}jHT&%?o+UzY!*?)=HLKORY3uVg^yk2>RS ze{}P9>$J7|jhexni8qEf7?1q7TlfBS>zCjC%n#ozLrF;hqv_kN-fVXJdV71?>G?x% z`f7aZkK`}cV>z2*CcjQ@wx_of-|Gg691gbabUL>^^!lT%Fof5i2a|3rm|?#&8BfR8 zvsaz*aC>}x-S7CZfUNxXq~GbOXIcf;^`0G8_kJY)IUR2@@$R?Y{VG)Yude4a*#V_6mCf2?>N#@t zG0Ymt94W#_)7kRZ@Qc)Z(to@4m#(^3SA|Zu^Ubwq`QOMTqW(9Y%)x!*bewA^-4P#w zj`LT77of6P{qN1^uJ?NJdW!1x$YR#5KbiIAtz5qkUt92W*OD_bF*^07M5V)rT7=WgZ0&zu|EwomBWX?jA(E4*6j)?|%4ZmCstG{XhT5 z-}|liU%Yss{w*r4s^3@R@yDO6(k?^!-YV@RR?DE`ht*bkFmqKD!^P)x-xm) zmk*PJZrEBb4TEMh8Fs>f1CRR5?_y zgc2m1fs-ca(W0TMs4tg2bvGwT7C|f!z9_INa??JPeSe>I!6_!5C`yj;EcTyl8mwXCz`IzlMT%_t3Z$;QT zL2K}?sp{~dY;$<{<(qx!H%N!1F85MO?Z2D7zVkcMM@mim-$}8T@_*$`{qP0fd6T}( zD@(8n3x5ed4{oQk$vf4WgpGj=7iO=+FN2Q{*@vI|nRm+ZX!cq@L_zgsm=O6xG>NVL zY~W9iuj_KsI;2>N<2uDb8p8C3$yv5&u@nXmEpcg~Z?9jsR>J=8zwwuU{!%nV{rmZc zB}~=vpG-+Qx35(o>!=sKxXx{oauI2VmOaUM%M%v0Zf6zb?R+u_`jXwwwmL=ERIxMit_Hp! zY7D~R-)&5n3P0N0`6g`dq=gH5I{zmhHbn^G41iK5wHbKBK(?O`=hf8|`5NHVHPG|Sh+4!EHHVkxA%*%e)1_$feyubIwZ~V?bl5f<%KPUZ&=>H^*;lTCb zFeDhn>fxk+_QxOp$)A7mLj6{{76_T0Z@& zR1me@S#S8WC&qhpt@JoT|s-jIFRAfCAeO_}N(BWVGLZ9W-jrIAJ zwei3HjllR}2I|K8T*2D-_OE~OaOOZa)W>^k!$17-7qQWwZmsv_*VcQ#`M`SFv)9e_ k9_ZTq|N5`Kp#EsR@}K;t3i_e^|1U|Q_|N{93?g3q8*GNlW&i*H literal 0 HcmV?d00001 diff --git a/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-58-21.xlsx b/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-58-21.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6e5f81423b99f3ab838f47d0c4d9254f94f1e290 GIT binary patch literal 104359 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 literal 0 HcmV?d00001 diff --git a/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-59-09.xlsx b/CognitivePrism/my-project/.playwright-mcp/students-with-passwords-2025-12-10T11-59-09.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6e5f81423b99f3ab838f47d0c4d9254f94f1e290 GIT binary patch literal 104359 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 literal 0 HcmV?d00001 diff --git a/CognitivePrism/my-project/COMPLETE_MISSING_LOCATORS_LIST.md b/CognitivePrism/my-project/COMPLETE_MISSING_LOCATORS_LIST.md new file mode 100644 index 0000000..e906462 --- /dev/null +++ b/CognitivePrism/my-project/COMPLETE_MISSING_LOCATORS_LIST.md @@ -0,0 +1,433 @@ +# Complete Missing Locators List - For UI Dev Team + +## šŸ“‹ Overview + +This document lists **ALL** missing `data-testid` attributes and temporary locators that need to be replaced with proper `data-testid` attributes. + +**Purpose**: Once UI Dev Team adds all these attributes, the automation will be 100% aligned and ready for testing. + +**Last Updated**: Based on DOM validation and code analysis + +--- + +## šŸ”“ CRITICAL: Current Status + +**DOM Validation Result**: Found **0 elements** with `data-testid` attributes in the live DOM. + +This means **ALL** `data-testid` attributes are currently missing from the rendered DOM, even though they may be in the source code. + +--- + +## šŸ“„ PAGE-BY-PAGE BREAKDOWN + +### 1. LOGIN PAGE (`pages/login_page.py`) + +#### āœ… Currently Using data-testid (Expected): + +- `student_login__form` +- `student_login__identifier_input` +- `student_login__password_input` +- `student_login__remember_checkbox` +- `student_login__error_banner` +- `student_login__submit_button` + +#### āŒ TEMPORARY LOCATORS (Need data-testid): + +| Current Locator | Type | Location | Required data-testid | Notes | +| -------------------------------------------------------------------------------------- | ----- | -------------------- | ------------------------------ | ------------------------ | +| `//div[@role='status' and @aria-live='polite' and (contains(text(), 'Invalid')...)]` | XPath | `login_page.py:26` | `student_login__error_toast` | Error toast notification | + +--- + +### 2. DASHBOARD PAGE (`pages/dashboard_page.py`) + +#### āœ… Currently Using data-testid (Expected): + +- `student_nav__assessments_link` +- `profile_incomplete__modal` +- `profile_incomplete__complete_button` +- `profile_incomplete__progress_value` + +#### āŒ TEMPORARY LOCATORS (Need data-testid): + +| Current Locator | Type | Location | Required data-testid | Notes | +| --------------------------------------- | ----- | ------------------------ | ------------------------------ | ----------------------- | +| `//h1[contains(text(), 'Hi There!')]` | XPath | `dashboard_page.py:19` | `dashboard__welcome_message` | Welcome message heading | + +--- + +### 3. STUDENT NAVIGATION (`pages/student_nav_page.py`) + +#### āœ… Currently Using data-testid (Expected): + +- `student_nav__dashboard_link` +- `student_nav__assessments_link` +- `student_nav__profile_button` +- `student_nav__profile_dropdown` +- `student_nav__edit_profile_button` +- `student_nav__reset_password_button` +- `student_nav__sign_out_button` + +**Status**: āœ… All locators use data-testid - No temporary locators + +--- + +### 4. MANDATORY PASSWORD RESET (`pages/mandatory_reset_page.py`) + +#### āœ… Currently Using data-testid (Expected): + +- `mandatory_reset__modal` +- `mandatory_reset__continue_button` +- `mandatory_reset__form` +- `mandatory_reset__current_password_input` +- `mandatory_reset__new_password_input` +- `mandatory_reset__confirm_password_input` +- `mandatory_reset__current_password_error` +- `mandatory_reset__new_password_error` +- `mandatory_reset__confirm_password_error` +- `mandatory_reset__back_button` +- `mandatory_reset__submit_button` + +**Status**: āœ… All locators use data-testid - No temporary locators + +--- + +### 5. PROFILE INCOMPLETE MODAL (`pages/profile_incomplete_page.py`) + +#### āœ… Currently Using data-testid (Expected): + +- `profile_incomplete__modal` +- `profile_incomplete__progress_value` +- `profile_incomplete__complete_button` + +**Status**: āœ… All locators use data-testid - No temporary locators + +--- + +### 6. PROFILE EDITOR PAGE (`pages/profile_editor_page.py`) + +#### āŒ MISSING data-testid ATTRIBUTES (ALL 50+ base attributes): + +**Page-Level Elements:** + +| Required data-testid | Element | Current Status | File Location | +| ----------------------------------------- | ------------------- | -------------- | --------------------------------- | +| `profile_editor__page` | Main container div | āŒ Missing | `StudentProfileEditor.jsx:1629` | +| `profile_editor__progress_value` | Progress percentage | āŒ Missing | `StudentProfileEditor.jsx:1692` | +| `profile_editor__missing_fields_toggle` | Toggle button | āŒ Missing | `StudentProfileEditor.jsx:1701` | + +**Navigation Buttons:** + +| Required data-testid | Element | Current Status | File Location | +| --------------------------------- | --------------- | -------------- | --------------------------------- | +| `profile_editor__prev_button` | Previous button | āŒ Missing | `StudentProfileEditor.jsx:1897` | +| `profile_editor__next_button` | Next button | āŒ Missing | `StudentProfileEditor.jsx:1907` | +| `profile_editor__cancel_button` | Cancel button | āŒ Missing | `StudentProfileEditor.jsx:1919` | +| `profile_editor__save_button` | Save button | āŒ Missing | `StudentProfileEditor.jsx:1927` | + +**Tab Navigation:** + +| Required data-testid | Element | Current Status | File Location | +| -------------------------------------------- | ---------- | -------------- | ------------------------------------------- | +| `profile_editor__tab_personal_information` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_contact_information` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_parent_guardian` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_education_details` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_focus_areas` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_self_assessment` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_hobbies_clubs` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_achievements` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | +| `profile_editor__tab_expectations` | Tab button | āŒ Missing | `StudentProfileEditor.jsx:1831` (dynamic) | + +**Step 1: Personal Information:** + +| Required data-testid | Element | Current Status | File Location | +| ---------------------------------------------------- | ---------- | -------------- | -------------------------------- | +| `profile_editor__first_name_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:777` | +| `profile_editor__last_name_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:795` | +| `profile_editor__gender_select` | Select | āŒ Missing | `StudentProfileEditor.jsx:810` | +| `profile_editor__dob_input` | Date input | āŒ Missing | `StudentProfileEditor.jsx:830` | +| `profile_editor__roll_number_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:847` | +| `profile_editor__nationality_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:863` | +| `profile_editor__language_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:873` | +| `profile_editor__student_id_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:883` | +| `profile_editor__student_cpid_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:893` | +| `profile_editor__specially_abled_checkbox` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:904` | +| `profile_editor__specially_abled_details_textarea` | Textarea | āŒ Missing | `StudentProfileEditor.jsx:917` | + +**Step 2: Contact Information:** + +| Required data-testid | Element | Current Status | File Location | +| -------------------------------------- | ------- | -------------- | --------------------------------- | +| `profile_editor__email_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:937` | +| `profile_editor__phone_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:955` | +| `profile_editor__address_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:973` | +| `profile_editor__city_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:984` | +| `profile_editor__state_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:994` | +| `profile_editor__zip_code_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1004` | +| `profile_editor__native_state_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1014` | + +**Step 3: Parent/Guardian:** + +| Required data-testid | Element | Current Status | File Location | +| ----------------------------------------------- | -------- | -------------- | --------------------------------- | +| `profile_editor__father_full_name_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1040` | +| `profile_editor__father_age_range_select` | Select | āŒ Missing | `StudentProfileEditor.jsx:1048` | +| `profile_editor__father_occupation_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1064` | +| `profile_editor__father_email_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1074` | +| `profile_editor__mother_full_name_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1093` | +| `profile_editor__mother_age_range_select` | Select | āŒ Missing | `StudentProfileEditor.jsx:1101` | +| `profile_editor__mother_occupation_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1117` | +| `profile_editor__mother_email_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1127` | +| `profile_editor__guardian_different_checkbox` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1142` | +| `profile_editor__guardian_full_name_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1157` | +| `profile_editor__guardian_relationship_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1167` | +| `profile_editor__guardian_phone_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1178` | +| `profile_editor__guardian_email_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1188` | +| `profile_editor__guardian_address_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1199` | + +**Step 4: Education Details:** + +| Required data-testid | Element | Current Status | File Location | +| --------------------------------------- | ------- | -------------- | --------------------------------- | +| `profile_editor__full_name_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1236` | +| `profile_editor__current_grade_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1247` | +| `profile_editor__section_input` | Input | āŒ Missing | `StudentProfileEditor.jsx:1257` | +| `profile_editor__board_stream_select` | Select | āŒ Missing | `StudentProfileEditor.jsx:1265` | + +**Step 5: Focus Areas (Multi-Select Checkboxes):** + +| Required data-testid Pattern | Element | Current Status | File Location | +| ------------------------------------------------------------ | -------- | -------------- | ----------------------------------------------------- | +| `profile_editor__short_term_focus__{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1301` (MultiSelectPicker) | +| `profile_editor__long_term_focus__{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1333` (MultiSelectPicker) | +| `profile_editor__short_term_focus_others_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1312` | +| `profile_editor__long_term_focus_others_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1344` | + +**Step 6: Self-Assessment (Multi-Select Checkboxes):** + +| Required data-testid Pattern | Element | Current Status | File Location | +| ------------------------------------------------------- | -------- | -------------- | ----------------------------------------------------- | +| `profile_editor__strength__{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1375` (MultiSelectPicker) | +| `profile_editor__improvement__{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1407` (MultiSelectPicker) | +| `profile_editor__strength_others_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1386` | +| `profile_editor__improvement_others_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1418` | + +**Step 7: Hobbies & Clubs:** + +| Required data-testid Pattern | Element | Current Status | File Location | +| ------------------------------------------------- | -------- | -------------- | ----------------------------------------------------- | +| `profile_editor__hobby__{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1449` (MultiSelectPicker) | +| `profile_editor__club_{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1495` (Direct mapping) | +| `profile_editor__hobby_other_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1460` | +| `profile_editor__club_other_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1518` | + +**Step 8: Achievements:** + +| Required data-testid | Element | Current Status | File Location | +| -------------------------------------------------- | -------- | -------------- | ------------------------------------------------------------- | +| `profile_editor__achievement_academics_textarea` | Textarea | āŒ Missing | `StudentProfileEditor.jsx:1541` | +| `profile_editor__achievement_sports_textarea` | Textarea | āŒ Missing | `StudentProfileEditor.jsx:1551` | +| `profile_editor__achievement_cultural_textarea` | Textarea | āŒ Missing | `StudentProfileEditor.jsx:1561` | +| `profile_editor__achievement_trained_textarea` | Textarea | āŒ Missing | `StudentProfileEditor.jsx:1572` (conditional - adults only) | +| `profile_editor__achievement_others_textarea` | Textarea | āŒ Missing | `StudentProfileEditor.jsx:1583` | + +**Step 9: Expectations:** + +| Required data-testid Pattern | Element | Current Status | File Location | +| ------------------------------------------------------- | -------- | -------------- | ----------------------------------------------------- | +| `profile_editor__expectation__{formatTestId(option)}` | Checkbox | āŒ Missing | `StudentProfileEditor.jsx:1605` (MultiSelectPicker) | +| `profile_editor__expectation_others_text` | Input | āŒ Missing | `StudentProfileEditor.jsx:1616` | + +#### āŒ TEMPORARY LOCATORS (Need data-testid): + +| Current Locator | Type | Location | Required data-testid | Notes | +| ------------------------------------------------------------------------------- | ----- | ------------------------------ | -------------------------------------------- | ------------------------------- | +| `//button[contains(@class, 'absolute right-0') and contains(@class, 'z-20')]` | XPath | `profile_editor_page.py:328` | `profile_editor__tabs_scroll_right_button` | Right scroll button for tabs | +| `//button[.//*[contains(@class, 'lucide-chevron-right')...]]` | XPath | `profile_editor_page.py:342` | `profile_editor__tabs_scroll_right_button` | Alternative right scroll button | +| `//button[contains(@class, 'absolute left-0') and contains(@class, 'z-20')]` | XPath | `profile_editor_page.py:360` | `profile_editor__tabs_scroll_left_button` | Left scroll button for tabs | +| `//div[@role='status']` | XPath | `profile_editor_page.py:520` | `profile_editor__toast_message` | Toast notification container | + +--- + +### 7. ASSESSMENTS PAGE (`pages/assessments_page.py`) + +#### āœ… Currently Using data-testid (Expected): + +- Dynamic pattern: `assessment_card__{assignmentId}` +- Dynamic pattern: `assessment_card__{assignmentId}_action` + +**Status**: āœ… All locators use data-testid - No temporary locators + +--- + +## šŸ“Š SUMMARY STATISTICS + +### Total Missing data-testid Attributes: **~60+ base attributes + dynamic checkboxes** + +**Breakdown:** + +- **Login Page**: 1 temporary locator +- **Dashboard Page**: 1 temporary locator +- **Profile Editor Page**: + - **50+ base attributes** (all inputs, selects, textareas, buttons, tabs) + - **100+ dynamic checkboxes** (Focus Areas, Strengths, Improvements, Hobbies, Clubs, Expectations) + - **4 temporary XPath locators** (scroll buttons, toast messages) + +### Total Temporary Locators: **6 XPath locators** + +--- + +## šŸŽÆ PRIORITY ORDER FOR UI DEV TEAM + +### Priority 1: CRITICAL (Required for Basic Automation) + +1. **Profile Editor - Navigation Buttons** (4 attributes) + + - `profile_editor__prev_button` + - `profile_editor__next_button` + - `profile_editor__cancel_button` + - `profile_editor__save_button` +2. **Profile Editor - Tab Navigation** (9 attributes) + + - All 9 tab buttons with pattern: `profile_editor__tab_{formatTestId(section.title)}` +3. **Profile Editor - Step 1-4 Basic Fields** (30+ attributes) + + - All input fields, selects, checkboxes in Steps 1-4 + +### Priority 2: IMPORTANT (Required for Complete Automation) + +1. **Profile Editor - Multi-Select Checkboxes** (100+ dynamic attributes) + + - Update `MultiSelectPicker` component to generate `data-testid` using `testIdPrefix` and `formatTestId` + - This will automatically fix Focus Areas, Strengths, Improvements, Hobbies, Expectations +2. **Profile Editor - Clubs Checkboxes** (12+ attributes) + + - Add `data-testid` to each club checkbox in the mapping +3. **Profile Editor - Textareas** (5 attributes) + + - All achievement textareas + +### Priority 3: NICE TO HAVE (Optional) + +1. **Temporary Locators Replacement** + - Tab scroll buttons + - Toast message containers + - Welcome message + +--- + +## šŸ“ IMPLEMENTATION NOTES FOR UI DEV TEAM + +### 1. MultiSelectPicker Component Update + +**File**: `src/pages/StudentProfileEditor.jsx` (Line 147) + +**Current Code**: + +```jsx + +``` + +**Status**: āœ… Already implemented in code, but not rendering in DOM + +**Action**: Verify `testIdPrefix` prop is being passed correctly to all `MultiSelectPicker` instances + +### 2. Tab Navigation + +**File**: `src/pages/StudentProfileEditor.jsx` (Line 1821) + +**Current Code**: + +```jsx +const tabTestId = `profile_editor__tab_${formatTestId(section.title)}` +