63 lines
2.0 KiB
TypeScript
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();
|
|
}
|
|
}
|