Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import type { Locator, Page } from '@playwright/test';
|
|
|
|
type GetByRoleName = NonNullable<Parameters<Locator['getByRole']>[1]>['name'];
|
|
type GetByRoleOptionsWithoutName = Omit<Parameters<Locator['getByRole']>[1], 'name'>;
|
|
|
|
export class FloatingUiHelper {
|
|
constructor(protected readonly page: Page) {}
|
|
|
|
getVisiblePoppers() {
|
|
// Match Reka UI popovers (data-side is unique to Reka UI positioned content)
|
|
return this.page.locator('[data-state="open"][data-side]');
|
|
}
|
|
|
|
getVisiblePopper() {
|
|
// Match both Element+ poppers (.el-popper:visible) and Reka UI poppers ([data-state="open"])
|
|
return this.page.locator(
|
|
'.el-popper:visible, [data-state="open"][role="dialog"], [data-state="open"][role="menu"], [data-state="open"][role="listbox"]',
|
|
);
|
|
}
|
|
|
|
getVisiblePopoverMenuItem(name?: GetByRoleName, options: GetByRoleOptionsWithoutName = {}) {
|
|
return this.getVisiblePopper()
|
|
.getByRole('menuitem', { name, ...options })
|
|
.filter({ visible: true });
|
|
}
|
|
|
|
getVisiblePopoverOption(name?: GetByRoleName, options: GetByRoleOptionsWithoutName = {}) {
|
|
return this.getVisiblePopper()
|
|
.getByRole('option', { name, ...options })
|
|
.filter({ visible: true });
|
|
}
|
|
}
|