import { Page, Locator } from '@playwright/test'; import { clickElement } from '../core/interactions'; /** * Get the log viewer header element (contains type counts and expand/collapse buttons) */ export async function getLogViewerHeader(page: Page): Promise { return page.locator('[data-testid="log-viewer-header"]'); } /** * Check if the log viewer header is visible */ export async function isLogViewerHeaderVisible(page: Page): Promise { const header = page.locator('[data-testid="log-viewer-header"]'); return await header.isVisible().catch(() => false); } /** * Get the log entries container element */ export async function getLogEntriesContainer(page: Page): Promise { return page.locator('[data-testid="log-entries-container"]'); } /** * Get a log entry by its type */ export async function getLogEntryByType(page: Page, type: string): Promise { return page.locator(`[data-testid="log-entry-${type}"]`).first(); } /** * Get all log entries of a specific type */ export async function getAllLogEntriesByType(page: Page, type: string): Promise { return page.locator(`[data-testid="log-entry-${type}"]`); } /** * Count log entries of a specific type */ export async function countLogEntriesByType(page: Page, type: string): Promise { const entries = page.locator(`[data-testid="log-entry-${type}"]`); return await entries.count(); } /** * Get the log type count badge by type */ export async function getLogTypeCountBadge(page: Page, type: string): Promise { return page.locator(`[data-testid="log-type-count-${type}"]`); } /** * Check if a log type count badge is visible */ export async function isLogTypeCountBadgeVisible(page: Page, type: string): Promise { const badge = page.locator(`[data-testid="log-type-count-${type}"]`); return await badge.isVisible().catch(() => false); } /** * Click the expand all button in the log viewer */ export async function clickLogExpandAll(page: Page): Promise { await clickElement(page, 'log-expand-all'); } /** * Click the collapse all button in the log viewer */ export async function clickLogCollapseAll(page: Page): Promise { await clickElement(page, 'log-collapse-all'); } /** * Get a log entry badge element */ export async function getLogEntryBadge(page: Page): Promise { return page.locator('[data-testid="log-entry-badge"]').first(); } /** * Check if any log entry badge is visible */ export async function isLogEntryBadgeVisible(page: Page): Promise { const badge = page.locator('[data-testid="log-entry-badge"]').first(); return await badge.isVisible().catch(() => false); } /** * Get the view mode toggle button (parsed/raw) */ export async function getViewModeButton(page: Page, mode: 'parsed' | 'raw'): Promise { return page.locator(`[data-testid="view-mode-${mode}"]`); } /** * Click a view mode toggle button */ export async function clickViewModeButton(page: Page, mode: 'parsed' | 'raw'): Promise { await clickElement(page, `view-mode-${mode}`); } /** * Check if a view mode button is active (selected) */ export async function isViewModeActive(page: Page, mode: 'parsed' | 'raw'): Promise { const button = page.locator(`[data-testid="view-mode-${mode}"]`); const classes = await button.getAttribute('class'); return classes?.includes('text-purple-300') ?? false; }