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

73 lines
2.4 KiB
TypeScript

import {Page, expect} from '@playwright/test';
import {slct} from '../../utils';
import {CommonSelectors} from '../constants/common-selectors';
import {CommonUrls} from '../constants/common-urls';
import {DialogMetricColorsQa, PlaceholderActionQa} from '../../../src/shared';
export default class MetricColorsDialog {
private page: Page;
private colorSettingsIconSelector = slct(PlaceholderActionQa.OpenMetricColorDialogIcon);
private applyButtonSelector = slct(DialogMetricColorsQa.ApplyButton);
private selectedPaletteItem = '.palette-item_selected';
private paletteColorInput = slct(`${DialogMetricColorsQa.Palette}-palette-input`);
private paletteSelector = slct('dialog-field-minifield-palette-selector');
constructor(page: Page) {
this.page = page;
}
async open() {
await this.page.locator(this.colorSettingsIconSelector).click({force: true});
const dialog = this.page.locator(slct(DialogMetricColorsQa.Dialog));
await expect(dialog).toBeVisible();
}
async cancel() {
const dialog = this.page.locator(slct(DialogMetricColorsQa.Dialog));
const cancelButton = this.page.locator(slct(DialogMetricColorsQa.CancelButton));
await cancelButton.click();
await expect(dialog).not.toBeVisible();
}
async getSelectedPaletteColor() {
const selectedPaletteItem = this.page.locator(this.selectedPaletteItem).first();
if (await selectedPaletteItem.isVisible()) {
return await selectedPaletteItem.getAttribute('data-qa');
}
return null;
}
getPaletteInput() {
return this.page.locator(this.paletteColorInput).locator(CommonSelectors.TextInput);
}
async selectColor(colorValue: string) {
await this.page.locator(slct(colorValue)).click();
}
async getSelectedPalette() {
return await this.page.locator(this.paletteSelector).textContent();
}
async selectPalette(palette: string) {
await this.page.locator(this.paletteSelector).click();
await this.page
.locator(CommonSelectors.SelectItem, {hasText: new RegExp(`^${palette}$`, 'i')})
.click();
}
async apply() {
const apiRunRequest = this.page.waitForRequest(
(request) => new URL(request.url()).pathname === CommonUrls.ApiRun,
);
await this.page.click(this.applyButtonSelector);
await (await apiRunRequest).response();
}
}