diff --git a/pages/domain_assessment_page.py b/pages/domain_assessment_page.py index 47b7bd4..949f536 100644 --- a/pages/domain_assessment_page.py +++ b/pages/domain_assessment_page.py @@ -324,6 +324,14 @@ class DomainAssessmentPage(BasePage): except: return False + def is_submit_button_visible(self): + """Check if submit button is visible and enabled""" + try: + submit_btn = self.find_element(self.SUBMIT_BUTTON) + return submit_btn.is_displayed() and submit_btn.is_enabled() + except: + return False + def get_all_questions(self): """ Get all question IDs on current page diff --git a/tests/load_tests/test_generic_load_assessments.py b/tests/load_tests/test_generic_load_assessments.py index 7bd23b9..d0446ad 100644 --- a/tests/load_tests/test_generic_load_assessments.py +++ b/tests/load_tests/test_generic_load_assessments.py @@ -454,39 +454,92 @@ def complete_assessment_flow_for_student( pass continue - # Check if submit button is enabled + # After answering, check if this is the last question (submit enabled) + # If submit is enabled, break and submit. Otherwise, click Next. + is_last_question = False try: submit_button = driver.find_element(*domain_assessment_page.SUBMIT_BUTTON) if submit_button.is_enabled() and submit_button.is_displayed(): + is_last_question = True steps_completed.append(f"All questions answered ({questions_answered} questions)") - break except: pass + + if is_last_question: + # Last question - break loop to submit + break + else: + # Not last question - click Next to continue + if domain_assessment_page.is_next_button_visible(): + try: + domain_assessment_page.click_next() + RandomizedWait.wait_for_navigation('next') + except Exception as e: + print(f"⚠️ Error clicking Next after question {question_id}: {e}") + # Try to continue anyway + consecutive_failures += 1 + if consecutive_failures >= max_consecutive_failures: + break + else: + # Next button not visible - might be last question or error + # Check submit button one more time + try: + submit_button = driver.find_element(*domain_assessment_page.SUBMIT_BUTTON) + if submit_button.is_enabled() and submit_button.is_displayed(): + is_last_question = True + break + except: + pass + # If still not last question, this is an error + consecutive_failures += 1 + if consecutive_failures >= max_consecutive_failures: + break - # Step 11: Submit assessment + # Step 11: Submit assessment (only if submit button is enabled - last question) if domain_assessment_page.is_submit_button_visible(): domain_assessment_page.click_submit() RandomizedWait.wait_for_submission('submit') - steps_completed.append("Submitted assessment") + steps_completed.append("Clicked Submit button") # Step 12: Handle submit confirmation modal if domain_assessment_page.is_submit_modal_present(): domain_assessment_page.confirm_submit() RandomizedWait.wait_for_submission('confirm') - steps_completed.append("Confirmed submission") + steps_completed.append("Confirmed submission in modal") - # Step 13: Handle feedback if present + # Step 13: Wait for success modal (appears after confirmation) + # Success modal auto-closes after 2 seconds, then feedback modal appears + try: + if domain_assessment_page.is_success_modal_present(): + steps_completed.append("Success modal appeared") + # Wait for success modal to auto-close (2 seconds + buffer) + time.sleep(3) # Wait for auto-close (2s) + buffer + # Wait for modal to disappear + domain_assessment_page.close_success_modal() + except: + pass + + # Step 14: Handle feedback modal (appears after success modal closes) try: feedback_page = DomainFeedbackPage(driver) - if feedback_page.is_modal_present(): + # Wait for feedback modal to appear (with retry) + feedback_modal_present = False + for i in range(10): # Wait up to 10 seconds + if feedback_page.is_modal_present(): + feedback_modal_present = True + break + RandomizedWait.wait_for_page_load('modal') + + if feedback_modal_present: feedback_page.submit_feedback( - question1_answer='yes', + question1_yes=True, question1_justification='Automated load test response', - question2_answer='This is an automated load test response for backend analysis.' + question2_text='This is an automated load test response for backend analysis.' ) RandomizedWait.wait_for_submission('feedback') - steps_completed.append("Submitted feedback") - except: + steps_completed.append("Submitted domain feedback") + except Exception as e: + print(f"⚠️ Error handling feedback: {e}") pass duration = time.time() - start_time