Files
alighasami 3d5eaf9445
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
first commit
2026-03-17 16:22:57 +03:30

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 });
}
}