51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import {SelectQa} from '../../../../src/shared/constants';
|
|
import {slct} from '../../../utils';
|
|
|
|
import {ListItemByParams} from '../../types';
|
|
import {ElementPO} from './ElementPO';
|
|
|
|
export class SelectElementPO extends ElementPO {
|
|
static selectors = {
|
|
qa: {
|
|
popup: slct(SelectQa.POPUP),
|
|
list: slct(SelectQa.LIST),
|
|
},
|
|
};
|
|
|
|
getListLocator() {
|
|
return this.page.locator(
|
|
`${SelectElementPO.selectors.qa.popup} ${SelectElementPO.selectors.qa.list}`,
|
|
);
|
|
}
|
|
|
|
async expectListVisible() {
|
|
await expect(this.getListLocator()).toBeVisible();
|
|
}
|
|
|
|
async selectListItem({idx, innerText, qa}: ListItemByParams) {
|
|
if (innerText !== undefined) {
|
|
await this.selectListItemByName(innerText);
|
|
} else if (typeof idx === 'number') {
|
|
await this.selectListItemByIdx(idx);
|
|
} else if (qa !== undefined) {
|
|
await this.selectListItemByQa(qa);
|
|
}
|
|
}
|
|
|
|
async selectListItemByQa(qaSelector: string) {
|
|
await this.expectListVisible();
|
|
await this.getListLocator().locator(qaSelector).click();
|
|
}
|
|
|
|
async selectListItemByIdx(idx: number) {
|
|
await this.expectListVisible();
|
|
await this.getListLocator().getByRole('option').nth(idx).click();
|
|
}
|
|
|
|
async selectListItemByName(name: string) {
|
|
await this.expectListVisible();
|
|
// case insensitive
|
|
await this.getListLocator().getByRole('option').filter({hasText: name}).click();
|
|
}
|
|
}
|