CP_AUTOMATION/tests/student_assessment/test_05_final_feedback.py
2025-12-12 19:54:54 +05:30

189 lines
7.2 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Test Cases for Final Feedback Survey
Tests the overall assessment feedback modal functionality:
- Overall feedback modal
- Per-question feedback modal
- Rating selection
- Comment entry
- Feedback submission
"""
import pytest
import time
from pages.feedback_survey_page import FeedbackSurveyPage
from pages.domains_page import DomainsPage
@pytest.mark.assessment
@pytest.mark.final_feedback
class TestFinalFeedback:
"""Test cases for Final Feedback Survey"""
def test_final_feedback_availability(self, assessment_with_domains):
"""Test checking if final feedback is available"""
driver = assessment_with_domains['driver']
domains_page = assessment_with_domains['domains_page']
# Check for final feedback modal on domains page
is_present = domains_page.is_final_feedback_modal_present()
if is_present:
print("✅ Final feedback modal is present on domains page")
else:
print(" Final feedback modal not present (all domains may not be completed)")
# Check for feedback survey modal
feedback_survey = FeedbackSurveyPage(driver)
if feedback_survey.is_final_feedback_available():
print("✅ Final feedback survey modal is available")
else:
pytest.skip("Final feedback not available - all domains may need to be completed first")
def test_overall_feedback_modal(self, assessment_with_domains):
"""Test overall feedback modal structure"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_overall_modal_present():
pytest.skip("Overall feedback modal not present")
# Modal should be visible
assert feedback_survey.is_element_visible(feedback_survey.OVERALL_MODAL, timeout=5), \
"Overall feedback modal should be visible"
print("✅ Overall feedback modal structure verified")
def test_per_question_feedback_modal(self, assessment_with_domains):
"""Test per-question feedback modal structure"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_per_question_modal_present():
pytest.skip("Per-question feedback modal not present")
# Modal should be visible
assert feedback_survey.is_element_visible(feedback_survey.PER_QUESTION_MODAL, timeout=5), \
"Per-question feedback modal should be visible"
# Get feedback questions
question_ids = feedback_survey.get_feedback_questions()
if question_ids:
print(f"✅ Per-question feedback modal verified with {len(question_ids)} question(s)")
else:
print("✅ Per-question feedback modal verified")
def test_set_overall_rating(self, assessment_with_domains):
"""Test setting overall rating"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_overall_modal_present():
pytest.skip("Overall feedback modal not present")
# Set rating to 4
feedback_survey.set_overall_rating(4)
time.sleep(0.5)
print("✅ Set overall rating to: 4")
def test_set_question_rating(self, assessment_with_domains):
"""Test setting rating for a specific question"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_per_question_modal_present():
pytest.skip("Per-question feedback modal not present")
# Get question IDs
question_ids = feedback_survey.get_feedback_questions()
if not question_ids:
pytest.skip("No feedback questions found")
# Set rating for first question
first_question_id = question_ids[0]
feedback_survey.set_question_rating(first_question_id, 4)
time.sleep(0.5)
print(f"✅ Set rating for question {first_question_id} to: 4")
def test_enter_question_comment(self, assessment_with_domains):
"""Test entering comment for a question"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_per_question_modal_present():
pytest.skip("Per-question feedback modal not present")
# Get question IDs
question_ids = feedback_survey.get_feedback_questions()
if not question_ids:
pytest.skip("No feedback questions found")
# Enter comment for first question
first_question_id = question_ids[0]
comment_text = "This is a test comment for automation testing."
feedback_survey.set_question_comment(first_question_id, comment_text)
time.sleep(0.5)
print(f"✅ Entered comment for question {first_question_id}")
def test_submit_overall_feedback(self, assessment_with_domains):
"""Test submitting overall feedback"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_overall_modal_present():
pytest.skip("Overall feedback modal not present")
# Set rating
feedback_survey.set_overall_rating(4)
time.sleep(0.5)
# Submit
feedback_survey.submit_feedback()
time.sleep(2)
# Verify modal is closed
assert not feedback_survey.is_overall_modal_present(), \
"Overall feedback modal should be closed after submission"
print("✅ Overall feedback submitted successfully")
def test_submit_per_question_feedback(self, assessment_with_domains):
"""Test submitting per-question feedback"""
driver = assessment_with_domains['driver']
feedback_survey = FeedbackSurveyPage(driver)
if not feedback_survey.is_per_question_modal_present():
pytest.skip("Per-question feedback modal not present")
# Get question IDs
question_ids = feedback_survey.get_feedback_questions()
if not question_ids:
pytest.skip("No feedback questions found")
# Set rating and comment for each question
for question_id in question_ids[:3]: # Limit to first 3 questions
try:
feedback_survey.set_question_rating(question_id, 4)
feedback_survey.set_question_comment(question_id, f"Test comment for question {question_id}")
time.sleep(0.3)
except:
pass
# Submit
feedback_survey.submit_feedback()
time.sleep(2)
# Verify modal is closed
assert not feedback_survey.is_per_question_modal_present(), \
"Per-question feedback modal should be closed after submission"
print(f"✅ Per-question feedback submitted for {len(question_ids)} question(s)")