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

154 lines
6.3 KiB
Python

"""
Test Cases for Assessments Page
Tests the assessments hub page functionality:
- Page load and rendering
- Assessment cards visibility
- Assessment IDs extraction
- Begin/Continue/Resume buttons
- Navigation to domains page
"""
import pytest
from pages.assessments_page import AssessmentsPage
from selenium.webdriver.common.by import By
from config.config import ASSESSMENTS_URL
@pytest.mark.assessment
@pytest.mark.assessments_page
class TestAssessmentsPage:
"""Test cases for Assessments Page"""
def test_assessments_page_loads(self, assessment_ready_student):
"""Test that assessments page loads successfully"""
assessments_page = assessment_ready_student['assessments_page']
driver = assessment_ready_student['driver']
# Verify URL
assert "/assessments" in driver.current_url, \
f"Should be on assessments page. Current URL: {driver.current_url}"
# Verify page loaded
assessments_page.wait_for_page_load()
print(f"✅ Assessments page loaded successfully: {driver.current_url}")
def test_assessment_cards_visible(self, assessment_ready_student):
"""Test that assessment cards are visible on the page"""
assessments_page = assessment_ready_student['assessments_page']
# Get all assessment cards
cards = assessments_page.get_all_assessment_cards()
assert len(cards) > 0, "At least one assessment card should be visible"
# Verify cards have data-testid attributes
for card in cards:
test_id = card.get_attribute("data-testid")
assert test_id is not None, "Assessment card should have data-testid attribute"
assert test_id.startswith("assessment_card__"), \
f"Assessment card data-testid should start with 'assessment_card__'. Got: {test_id}"
print(f"✅ Found {len(cards)} assessment card(s) with proper data-testid attributes")
def test_assessment_ids_extraction(self, assessment_ready_student):
"""Test that assessment IDs can be extracted correctly"""
assessments_page = assessment_ready_student['assessments_page']
# Get assessment IDs
assessment_ids = assessments_page.get_assessment_ids()
assert len(assessment_ids) > 0, "At least one assessment ID should be found"
# Verify IDs are valid (numeric)
for assessment_id in assessment_ids:
assert assessment_id.isdigit(), \
f"Assessment ID should be numeric. Got: {assessment_id}"
print(f"✅ Extracted {len(assessment_ids)} assessment ID(s): {assessment_ids}")
def test_assessment_card_structure(self, assessment_ready_student):
"""Test that assessment cards have proper structure"""
assessments_page = assessment_ready_student['assessments_page']
# Get first assessment card
assessment_ids = assessments_page.get_assessment_ids()
if not assessment_ids:
pytest.skip("No assessments available")
first_assessment_id = assessment_ids[0]
card = assessments_page.get_assessment_card(first_assessment_id)
# Verify card is visible
assert card.is_displayed(), "Assessment card should be visible"
# Verify action button exists
action_button = assessments_page.driver.find_element(
By.CSS_SELECTOR,
f"[data-testid='assessment_card__{first_assessment_id}_action']"
)
assert action_button.is_displayed(), "Action button should be visible"
# Get button text (Begin/Continue/Resume)
button_text = action_button.text.strip()
assert len(button_text) > 0, "Action button should have text"
print(f"✅ Assessment card {first_assessment_id} has proper structure")
print(f" Action button text: {button_text}")
def test_begin_assessment_navigation(self, assessment_ready_student):
"""Test that clicking Begin Assessment navigates to domains page"""
assessments_page = assessment_ready_student['assessments_page']
driver = assessment_ready_student['driver']
# Get first available assessment
assessment_ids = assessments_page.get_assessment_ids()
if not assessment_ids:
pytest.skip("No assessments available")
assessment_id = assessment_ids[0]
# Click Begin Assessment
assessments_page.click_begin_assessment(assessment_id)
# Verify navigation to domains page
assert "/assessment/" in driver.current_url, \
f"Should navigate to assessment page. Current URL: {driver.current_url}"
assert "/domains" in driver.current_url, \
f"Should navigate to domains page. Current URL: {driver.current_url}"
assert assessment_id in driver.current_url, \
f"URL should contain assessment ID {assessment_id}. Current URL: {driver.current_url}"
print(f"✅ Successfully navigated to domains page for assessment {assessment_id}")
print(f" URL: {driver.current_url}")
def test_multiple_assessments_handling(self, assessment_ready_student):
"""Test handling of multiple assessments on the page"""
assessments_page = assessment_ready_student['assessments_page']
# Get all assessment IDs
assessment_ids = assessments_page.get_assessment_ids()
if len(assessment_ids) < 2:
pytest.skip("Less than 2 assessments available - cannot test multiple handling")
# Verify each assessment has a card and action button
for assessment_id in assessment_ids:
card = assessments_page.get_assessment_card(assessment_id)
assert card.is_displayed(), f"Assessment card {assessment_id} should be visible"
action_button = assessments_page.driver.find_element(
By.CSS_SELECTOR,
f"[data-testid='assessment_card__{assessment_id}_action']"
)
assert action_button.is_displayed(), \
f"Action button for assessment {assessment_id} should be visible"
print(f"✅ All {len(assessment_ids)} assessments have proper structure")