import { Page, Locator } from '@playwright/test'; import { waitForElement, waitForElementHidden } from '../core/waiting'; /** * Check if the agent output modal is visible */ export async function isAgentOutputModalVisible(page: Page): Promise { const modal = page.locator('[data-testid="agent-output-modal"]'); return await modal.isVisible(); } /** * Wait for the agent output modal to be visible */ export async function waitForAgentOutputModal( page: Page, options?: { timeout?: number } ): Promise { return await waitForElement(page, 'agent-output-modal', options); } /** * Wait for the agent output modal to be hidden */ export async function waitForAgentOutputModalHidden( page: Page, options?: { timeout?: number } ): Promise { await waitForElementHidden(page, 'agent-output-modal', options); } /** * Get the modal title/description text to verify which feature's output is being shown */ export async function getAgentOutputModalDescription(page: Page): Promise { const modal = page.locator('[data-testid="agent-output-modal"]'); const description = modal.locator('[id="radix-\\:r.+\\:-description"]').first(); return await description.textContent().catch(() => null); } /** * Check the dialog description content in the agent output modal */ export async function getOutputModalDescription(page: Page): Promise { const modalDescription = page.locator( '[data-testid="agent-output-modal"] [data-slot="dialog-description"]' ); return await modalDescription.textContent().catch(() => null); } /** * Get the agent output modal description element */ export async function getAgentOutputModalDescriptionElement(page: Page): Promise { return page.locator('[data-testid="agent-output-description"]'); } /** * Check if the agent output modal description is scrollable */ export async function isAgentOutputDescriptionScrollable(page: Page): Promise { const description = page.locator('[data-testid="agent-output-description"]'); const scrollInfo = await description.evaluate((el) => { return { scrollHeight: el.scrollHeight, clientHeight: el.clientHeight, isScrollable: el.scrollHeight > el.clientHeight, }; }); return scrollInfo.isScrollable; } /** * Get scroll dimensions of the agent output modal description */ export async function getAgentOutputDescriptionScrollDimensions(page: Page): Promise<{ scrollHeight: number; clientHeight: number; maxHeight: string; overflowY: string; }> { const description = page.locator('[data-testid="agent-output-description"]'); return await description.evaluate((el) => { const style = window.getComputedStyle(el); return { scrollHeight: el.scrollHeight, clientHeight: el.clientHeight, maxHeight: style.maxHeight, overflowY: style.overflowY, }; }); }