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

219 lines
8.1 KiB
Python
Raw Permalink 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 Domain Feedback Page
Tests the per-domain feedback modal functionality:
- Modal appearance after domain completion
- Question 1 (Yes/No with reason)
- Question 2 (Textarea)
- Submit feedback
- Skip feedback
- Navigation after feedback
"""
import pytest
import time
from pages.domain_feedback_page import DomainFeedbackPage
from pages.domain_assessment_page import DomainAssessmentPage
from pages.domains_page import DomainsPage
@pytest.fixture(scope="function")
def domain_completed_for_feedback(assessment_with_domains):
"""
Fixture that completes a domain assessment to trigger feedback modal
NOTE: This is a simplified version - in real scenario, would answer all questions
"""
domains_page = assessment_with_domains['domains_page']
driver = assessment_with_domains['driver']
domain_ids = assessment_with_domains['domain_ids']
if not domain_ids:
pytest.skip("No domains available")
# Find first unlocked domain
unlocked_domain_id = None
for domain_id in domain_ids:
if domains_page.is_domain_unlocked(domain_id):
unlocked_domain_id = domain_id
break
if not unlocked_domain_id:
pytest.skip("No unlocked domains available")
# Start domain assessment
domains_page.click_domain_action(unlocked_domain_id)
time.sleep(2)
domain_assessment = DomainAssessmentPage(driver)
domain_assessment.wait_for_page_load()
domain_assessment.dismiss_guidance()
time.sleep(1)
# NOTE: In a real scenario, we would answer all questions here
# For now, we'll just check if feedback modal appears
# This test assumes the domain has been completed (manually or by another test)
return {
'driver': driver,
'domain_assessment': domain_assessment,
'domain_id': unlocked_domain_id,
'domains_page': domains_page
}
@pytest.mark.assessment
@pytest.mark.domain_feedback
class TestDomainFeedback:
"""Test cases for Domain Feedback Page"""
def test_feedback_modal_detection(self, domain_completed_for_feedback):
"""Test that feedback modal can be detected"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
# Check if modal is present (may not be if domain not completed)
is_present = domain_feedback.is_modal_present()
if is_present:
print("✅ Domain feedback modal is present")
else:
print(" Domain feedback modal not present (domain may not be completed yet)")
pytest.skip("Domain feedback modal not present - domain may need to be completed first")
def test_feedback_modal_structure(self, domain_completed_for_feedback):
"""Test that feedback modal has proper structure"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
if not domain_feedback.is_modal_present():
pytest.skip("Domain feedback modal not present")
# Check for question 1 yes/no
has_yes_no = domain_feedback.has_question1_yes_no()
# Check for question 1 reason textarea
has_reason = domain_feedback.has_question1_reason()
# Check for question 2 textarea
has_question2 = domain_feedback.has_question2_textarea()
# At least one question should be present
assert has_yes_no or has_reason or has_question2, \
"Feedback modal should have at least one question"
print(f"✅ Feedback modal structure verified:")
print(f" Question 1 (Yes/No): {'' if has_yes_no else ''}")
print(f" Question 1 (Reason): {'' if has_reason else ''}")
print(f" Question 2 (Textarea): {'' if has_question2 else ''}")
def test_answer_question1_yes(self, domain_completed_for_feedback):
"""Test answering question 1 with Yes"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
if not domain_feedback.is_modal_present():
pytest.skip("Domain feedback modal not present")
if not domain_feedback.has_question1_yes_no():
pytest.skip("Question 1 does not have Yes/No options")
# Answer Yes
domain_feedback.select_question1_yes()
time.sleep(0.5)
print("✅ Answered question 1 with: Yes")
def test_enter_question1_reason(self, domain_completed_for_feedback):
"""Test entering reason for question 1"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
if not domain_feedback.is_modal_present():
pytest.skip("Domain feedback modal not present")
if not domain_feedback.has_question1_reason():
pytest.skip("Question 1 does not have reason textarea")
# Enter reason
reason_text = "This is a test reason for automation testing."
domain_feedback.enter_question1_reason(reason_text)
time.sleep(0.5)
print(f"✅ Entered question 1 reason: {reason_text[:50]}...")
def test_enter_question2_text(self, domain_completed_for_feedback):
"""Test entering text for question 2"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
if not domain_feedback.is_modal_present():
pytest.skip("Domain feedback modal not present")
if not domain_feedback.has_question2_textarea():
pytest.skip("Question 2 textarea not available")
# Enter text
question2_text = "This is a test response for question 2 in domain feedback."
domain_feedback.enter_question2_text(question2_text)
time.sleep(0.5)
print(f"✅ Entered question 2 text: {question2_text[:50]}...")
def test_submit_feedback(self, domain_completed_for_feedback):
"""Test submitting domain feedback"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
if not domain_feedback.is_modal_present():
pytest.skip("Domain feedback modal not present")
# Fill feedback
question1_yes = True
question1_text = "Test reason for automation."
question2_text = "Test response for question 2."
# Submit feedback
domain_feedback.submit_feedback(
question1_yes=question1_yes,
question1_text=question1_text,
question2_text=question2_text
)
time.sleep(2)
# Verify modal is closed and navigated to domains page
assert not domain_feedback.is_modal_present(), \
"Feedback modal should be closed after submission"
assert "/domains" in driver.current_url, \
f"Should navigate to domains page. Current URL: {driver.current_url}"
print("✅ Domain feedback submitted successfully")
print(f" Navigated to: {driver.current_url}")
def test_skip_feedback(self, domain_completed_for_feedback):
"""Test skipping domain feedback"""
driver = domain_completed_for_feedback['driver']
domain_feedback = DomainFeedbackPage(driver)
# Reload page to get feedback modal again (if needed)
# For this test, we'll assume modal is present
if not domain_feedback.is_modal_present():
pytest.skip("Domain feedback modal not present - cannot test skip")
# Skip feedback
domain_feedback.skip_feedback()
time.sleep(2)
# Verify modal is closed and navigated to domains page
assert not domain_feedback.is_modal_present(), \
"Feedback modal should be closed after skipping"
assert "/domains" in driver.current_url, \
f"Should navigate to domains page. Current URL: {driver.current_url}"
print("✅ Domain feedback skipped successfully")