import { Page, Locator } from '@playwright/test'; /** * Sanitize a string for use in data-testid selectors. * This mirrors the sanitizeForTestId function in apps/ui/src/lib/utils.ts * to ensure tests use the same sanitization logic as the component. * * @param name - The string to sanitize (e.g., project name) * @returns A sanitized string safe for CSS selectors */ export function sanitizeForTestId(name: string): string { return name .toLowerCase() .replace(/\s+/g, '-') .replace(/[^a-z0-9-]/g, '') .replace(/-+/g, '-') .replace(/^-|-$/g, ''); } /** * Get an element by its data-testid attribute */ export async function getByTestId(page: Page, testId: string): Promise { return page.locator(`[data-testid="${testId}"]`); } /** * Get a button by its text content */ export async function getButtonByText(page: Page, text: string): Promise { return page.locator(`button:has-text("${text}")`); } /** * Get the category autocomplete input element */ export async function getCategoryAutocompleteInput( page: Page, testId: string = 'feature-category-input' ): Promise { return page.locator(`[data-testid="${testId}"]`); } /** * Get the category autocomplete dropdown list */ export async function getCategoryAutocompleteList(page: Page): Promise { return page.locator('[data-testid="category-autocomplete-list"]'); }