diff --git a/tests/suites/memoryViewer/MemoryViewer.ts b/tests/suites/memoryViewer/MemoryViewer.ts index 8fdb335ca2..658ed72981 100644 --- a/tests/suites/memoryViewer/MemoryViewer.ts +++ b/tests/suites/memoryViewer/MemoryViewer.ts @@ -1,5 +1,7 @@ import type {Locator, Page} from '@playwright/test'; +import {VISIBILITY_TIMEOUT} from '../tenant/TenantPage'; + export class MemoryViewer { readonly container: Locator; readonly progressContainer: Locator; @@ -24,6 +26,14 @@ export class MemoryViewer { this.definitionList = this.popup.locator('.g-definition-list'); } + async isVisible() { + return this.container.isVisible(); + } + + async waitForVisible() { + await this.container.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT}); + } + async getStatus() { const classList = await this.container.getAttribute('class'); if (classList?.includes('memory-viewer_status_good')) { diff --git a/tests/suites/memoryViewer/memoryViewer.test.ts b/tests/suites/memoryViewer/memoryViewer.test.ts index d796bc23d0..1a8c3ceac8 100644 --- a/tests/suites/memoryViewer/memoryViewer.test.ts +++ b/tests/suites/memoryViewer/memoryViewer.test.ts @@ -1,17 +1,25 @@ import {expect, test} from '@playwright/test'; import {NodesPage} from '../nodes/NodesPage'; +import {PaginatedTable} from '../paginatedTable/paginatedTable'; import {MemoryViewer} from './MemoryViewer'; test.describe('Memory Viewer Widget', () => { test.beforeEach(async ({page}) => { const nodesPage = new NodesPage(page); + const memoryViewer = new MemoryViewer(page); await nodesPage.goto(); - // Get the first row's memory viewer - const paginatedTable = await page.locator('.ydb-paginated-table__table'); - await paginatedTable.waitFor(); + const paginatedTable = new PaginatedTable(page); + await paginatedTable.waitForTableVisible(); + await paginatedTable.waitForTableData(); + if (!(await memoryViewer.isVisible())) { + await paginatedTable.openColumnSetup(); + await paginatedTable.setColumnChecked('Memory'); + await paginatedTable.applyColumnVisibility(); + } + await memoryViewer.waitForVisible(); }); test('Memory viewer is visible and has correct status', async ({page}) => { diff --git a/tests/suites/paginatedTable/paginatedTable.ts b/tests/suites/paginatedTable/paginatedTable.ts index 5b2abfa6e2..8ec0d5c71e 100644 --- a/tests/suites/paginatedTable/paginatedTable.ts +++ b/tests/suites/paginatedTable/paginatedTable.ts @@ -1,5 +1,7 @@ import type {Locator, Page} from '@playwright/test'; +import {VISIBILITY_TIMEOUT} from '../tenant/TenantPage'; + export class PaginatedTable { private page: Page; private tableSelector: Locator; @@ -11,6 +13,8 @@ export class PaginatedTable { private refreshButton: Locator; private refreshIntervalSelect: Locator; private headCells: Locator; + private columnSetupButton: Locator; + private columnSetupPopup: Locator; constructor(page: Page) { this.page = page; @@ -23,6 +27,14 @@ export class PaginatedTable { this.emptyTableRows = this.tableSelector.locator('.ydb-paginated-table__row_empty'); this.refreshButton = page.locator('.auto-refresh-control button[aria-label="Refresh"]'); this.refreshIntervalSelect = page.getByTestId('ydb-autorefresh-select'); + this.columnSetupButton = this.tableSelector.locator( + '.g-tree-select.g-table-column-setup button', + ); + this.columnSetupPopup = page.locator('.g-popup .g-select-popup.g-tree-select__popup'); + } + + async waitForTableVisible() { + await this.tableSelector.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT}); } async search(searchTerm: string) { @@ -119,6 +131,48 @@ export class PaginatedTable { await this.waitForTableData(); } + async openColumnSetup() { + await this.columnSetupButton.click(); + await this.columnSetupPopup.waitFor({state: 'visible'}); + } + + async setColumnChecked(columnName: string) { + const columnOption = this.columnSetupPopup.locator(`[data-list-item="${columnName}"]`); + const checkIcon = columnOption.locator('.g-icon.g-color-text_color_info'); + const isVisible = await checkIcon.isVisible(); + if (!isVisible) { + await columnOption.click(); + } + } + + async setColumnUnchecked(columnName: string) { + const columnOption = this.columnSetupPopup.locator(`[data-list-item="${columnName}"]`); + const checkIcon = columnOption.locator('.g-icon.g-color-text_color_info'); + const isVisible = await checkIcon.isVisible(); + if (isVisible) { + await columnOption.click(); + } + } + + async applyColumnVisibility() { + const applyButton = this.columnSetupPopup.locator('button:has-text("Apply")'); + await applyButton.click(); + await this.columnSetupPopup.waitFor({state: 'hidden'}); + } + + async getVisibleColumnsCount(): Promise { + const statusText = await this.columnSetupButton + .locator('.g-table-column-setup__status') + .innerText(); + return statusText; + } + + async isColumnVisible(columnName: string): Promise { + const columnOption = this.columnSetupPopup.locator(`[data-list-item="${columnName}"]`); + const checkIcon = columnOption.locator('.g-icon.g-color-text_color_info'); + return await checkIcon.isVisible(); + } + private async getColumnIndex(columnName: string): Promise { const count = await this.headCells.count(); for (let i = 0; i < count; i++) {