CP_AUTOMATION/pages/assessments_page.py
2025-12-17 10:47:30 +05:30

88 lines
2.9 KiB
Python

"""
Assessments Page Object Model
Handles assessment hub/product page.
Scope: assessment_card
"""
from selenium.webdriver.common.by import By
from pages.base_page import BasePage
# Import will be overridden if --url is used
class AssessmentsPage(BasePage):
"""Page Object for Assessments Page"""
# Locators using data-testid (scope: assessment_card)
# Dynamic pattern: assessment_card__{assignmentId} and assessment_card__{assignmentId}_action
def __init__(self, driver):
"""Initialize Assessments Page"""
super().__init__(driver)
# Get current ASSESSMENTS_URL (may have been overridden)
from config.config import ASSESSMENTS_URL
self.url = ASSESSMENTS_URL
def navigate(self):
"""Navigate to assessments page"""
self.navigate_to(self.url)
def wait_for_page_load(self):
"""Wait for assessments page to load completely"""
super().wait_for_page_load() # Call parent method
def get_assessment_card(self, assignment_id):
"""
Get assessment card element by assignment ID
Args:
assignment_id: Assignment/Assessment ID
Returns:
WebElement: Assessment card element
"""
card_locator = (By.CSS_SELECTOR, f"[data-testid='assessment_card__{assignment_id}']")
return self.find_element(card_locator)
def click_begin_assessment(self, assignment_id):
"""
Click Begin/Continue/Resume button for an assessment
Args:
assignment_id: Assignment/Assessment ID
"""
action_locator = (By.CSS_SELECTOR, f"[data-testid='assessment_card__{assignment_id}__action']")
self.click_element(action_locator)
# Wait for navigation to domains page
self.wait.wait_for_url_contains("/assessment/")
self.wait.wait_for_url_contains("/domains")
def get_all_assessment_cards(self):
"""
Get all assessment cards on the page
Returns:
list: List of assessment card elements
"""
# Find all elements with assessment_card pattern
cards = self.driver.find_elements(By.CSS_SELECTOR, "[data-testid^='assessment_card__']")
return cards
def get_assessment_ids(self):
"""
Get all assessment IDs from cards on the page
Returns:
list: List of assessment IDs
"""
import re
cards = self.get_all_assessment_cards()
ids = []
for card in cards:
test_id = card.get_attribute("data-testid")
if test_id:
# Extract ID from pattern: assessment_card__{id} or assessment_card__{id}_action
match = re.search(r'assessment_card__(\d+)', test_id)
if match:
ids.append(match.group(1))
return list(set(ids)) # Return unique IDs