154 lines
6.3 KiB
Python
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")
|
|
|
|
|
|
|
|
|
|
|
|
|