n8n/packages/testing/playwright/pages/components/FloatingUiHelper.ts
Csaba Tuncsik 0a290b9ad3
fix(editor): Update project role selector component to better manage custom roles (#24991)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 09:22:05 +00:00

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