datalens-ui/tests/page-objects/workbook/NavigationMinimalPopup.ts
2026-06-24 21:10:34 +05:00

63 lines
2.0 KiB
TypeScript

import {Page} from '@playwright/test';
import {slct} from '../../utils';
import {DlNavigationQA, WorkbookNavigationMinimalQa} from '../../../src/shared';
import {ListItemByParams} from '../../page-objects/types';
export class NavigationMinimalPopup {
workbookSlctPopup = slct(WorkbookNavigationMinimalQa.Popup);
workbookSlctInput = slct(WorkbookNavigationMinimalQa.Input);
workbookSlctList = slct(WorkbookNavigationMinimalQa.List);
navigationSlctPopup = slct(DlNavigationQA.NavigationMinimal);
navigationSlctInput = slct(DlNavigationQA.SearchInput);
navigationSlctList = slct(DlNavigationQA.List);
popupLocator;
listLocator;
protected page: Page;
constructor(page: Page) {
this.page = page;
this.popupLocator = this.page
.locator(this.workbookSlctPopup)
.or(this.page.locator(this.navigationSlctPopup));
this.listLocator = this.popupLocator
.locator(this.workbookSlctList)
.or(this.popupLocator.locator(this.navigationSlctList));
}
async waitForOpen() {
await this.popupLocator.waitFor({state: 'visible'});
}
async isVisible() {
await this.popupLocator.isVisible();
}
async fillInput(value: string) {
const input = this.popupLocator
.locator(`${this.workbookSlctInput} input`)
.or(this.popupLocator.locator(`${this.navigationSlctInput} input`));
await input.fill(value);
}
async selectListItem({innerText, idx}: ListItemByParams) {
await this.waitForOpen();
if (innerText) {
await this.fillInput(innerText);
const listItem = this.listLocator.locator(slct(innerText));
await listItem.waitFor({state: 'visible'});
await listItem.click();
} else if (typeof idx === 'number') {
await this.selectListItemByIdx(idx);
}
}
async selectListItemByIdx(idx: number) {
await this.listLocator.getByRole('listitem').nth(idx).click();
}
}