annator-command-center / tests /fixtures /shared_utilities.py
techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 8)
aef804e verified
Raw
History Blame Contribute Delete
2.83 kB
"""
Shared utility functions for E2E and integration tests.
Provides common helpers to reduce test code duplication and ensure
consistent behavior across all test suites.
"""
from typing import Optional, Callable
from playwright.sync_api import Page, Locator
async def wait_for_selector(
page: Page,
selector: str,
timeout: int = 5000,
state: str = "visible"
) -> Locator:
"""Wait for selector to reach specified state.
Args:
page: Playwright page object
selector: CSS selector (prefer data-testid)
timeout: Milliseconds to wait
state: One of: attached, detached, visible, hidden
Returns:
Locator for the matched element
Raises:
TimeoutError: If selector not found within timeout
Example:
wait_for_selector(page, "[data-testid='agent-card']")
"""
locator = page.locator(selector)
locator.wait_for(state=state, timeout=timeout)
return locator
async def click_element(
page: Page,
selector: str,
timeout: int = 5000
) -> None:
"""Click element with selector.
Args:
page: Playwright page object
selector: CSS selector (prefer data-testid)
timeout: Milliseconds to wait before clicking
Example:
await click_element(page, "[data-testid='submit-button']")
"""
wait_for_selector(page, selector, timeout=timeout)
page.click(selector)
async def fill_input(
page: Page,
selector: str,
value: str,
timeout: int = 5000
) -> None:
"""Fill input field with value.
Args:
page: Playwright page object
selector: CSS selector (prefer data-testid)
value: Value to fill
timeout: Milliseconds to wait before filling
Example:
await fill_input(page, "[data-testid='email-input']", "test@example.com")
"""
wait_for_selector(page, selector, timeout=timeout)
page.fill(selector, value)
async def wait_for_text(
page: Page,
selector: str,
text: str,
timeout: int = 5000
) -> None:
"""Wait for element to contain specific text.
Args:
page: Playwright page object
selector: CSS selector (prefer data-testid)
text: Text to wait for
timeout: Milliseconds to wait
Example:
await wait_for_text(page, "[data-testid='status']", "Complete")
"""
locator = page.locator(selector)
locator.wait_for(state="visible", timeout=timeout)
locator.wait_for("has_text", text, timeout=timeout)
def get_test_id(test_id: str) -> str:
"""Generate data-testid selector.
Args:
test_id: Test ID value (e.g., "submit-button")
Returns:
CSS selector for data-testid
Example:
get_test_id("submit-button") # "[data-testid='submit-button']"
"""
return f"[data-testid='{test_id}']"