From 27c331684afe2d11a1d73b52cc071f8a866809b7 Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Fri, 30 Jan 2026 19:11:31 +0400 Subject: [PATCH 01/10] disable tests skipping --- .../tests/dataGrid/common/scrolling.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index 9cf12445ec6e..8fdfdcbab25c 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -225,7 +225,7 @@ test('DataGrid should not reset its top scroll position after cell modification }, })); -test.meta({ unstable: true })('Ungrouping after grouping should work correctly if row rendering mode is virtual', async (t) => { +test('Ungrouping after grouping should work correctly if row rendering mode is virtual', async (t) => { const dataGrid = new DataGrid('#container'); await t.expect(dataGrid.isReady()).ok(); @@ -494,7 +494,7 @@ test('Header container should have padding-right if grid has max-height and scro }); }); -test.meta({ unstable: true })('New virtual mode. A detail row should be rendered when the last master row is expanded', async (t) => { +test('New virtual mode. A detail row should be rendered when the last master row is expanded', async (t) => { const dataGrid = new DataGrid('#container'); await t.expect(dataGrid.isReady()).ok(); @@ -548,7 +548,7 @@ test.meta({ unstable: true })('New virtual mode. A detail row should be rendered }); }); -test.meta({ unstable: true })('New virtual mode. An adaptive row should be rendered when the last row is expanded', async (t) => { +test('New virtual mode. An adaptive row should be rendered when the last row is expanded', async (t) => { const dataGrid = new DataGrid('#container'); // act @@ -604,7 +604,7 @@ test.meta({ unstable: true })('New virtual mode. An adaptive row should be rende }); }); -test.meta({ unstable: true })('New virtual mode. Virtual rows should not be in view port', async (t) => { +test('New virtual mode. Virtual rows should not be in view port', async (t) => { const dataGrid = new DataGrid('#container'); const getVirtualRowInfo = ClientFunction(() => { const result: any = {}; @@ -883,7 +883,7 @@ test.meta({ browserSize: [800, 700] })('New mode. Rows should be rendered proper }); }); -test.meta({ unstable: true, browserSize: [800, 800] })('Rows are rendered properly when window content is scrolled (T1070388)', async (t) => { +test.meta({ browserSize: [800, 800] })('Rows are rendered properly when window content is scrolled (T1070388)', async (t) => { const dataGrid = new DataGrid('#container'); await t.expect(dataGrid.isReady()).ok(); @@ -1837,7 +1837,7 @@ test('DataGrid - The "row" parameter in the FocusedRowChanged event refers to a [true, false].forEach((nativeScroll) => { type TestCaseWindow = typeof window & { dataGridScrollableEventValues?: number[] }; - test.meta({ unstable: true })(`Should not scroll back on top with virtual scrolling and adaptive master detail (nativeScroll: ${nativeScroll}) [T1278804]`, async (t) => { + test(`Should not scroll back on top with virtual scrolling and adaptive master detail (nativeScroll: ${nativeScroll}) [T1278804]`, async (t) => { // NOTE: idx + 1 logic inside POM const adaptiveCellIdx = 101; const scrollValuesThreshold = 100; From 95ffb73668d1f5e1b2931fe1186a32d60929e527 Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Mon, 2 Feb 2026 17:59:55 +0400 Subject: [PATCH 02/10] fix the first skipped test --- .../tests/dataGrid/common/scrolling.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index 8fdfdcbab25c..e7ecedfa525e 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -232,9 +232,19 @@ test('Ungrouping after grouping should work correctly if row rendering mode is v // act await dataGrid.scrollTo(t, { top: 500 }); - await dataGrid.apiColumnOption('group', 'groupIndex', 0); let visibleRows = await dataGrid.apiGetVisibleRows(); + // assert + await t + .expect(visibleRows[0].rowType) + .eql('data') + .expect(visibleRows[0].key) + .notEql(1); + + // act + await dataGrid.apiColumnOption('group', 'groupIndex', 0); + visibleRows = await dataGrid.apiGetVisibleRows(); + // assert await t .expect(visibleRows.length) @@ -279,7 +289,7 @@ test('Ungrouping after grouping should work correctly if row rendering mode is v return items; }; return createWidget('dxDataGrid', { - height: 400, + height: 500, loadingTimeout: null, keyExpr: 'id', dataSource: getItems(), From 889949e8b4343b29b7bb6292c2bedda33778283d Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Mon, 2 Feb 2026 18:35:04 +0400 Subject: [PATCH 03/10] fix the second skipped test --- .../tests/dataGrid/common/scrolling.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index e7ecedfa525e..e069324c4bab 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -506,11 +506,13 @@ test('Header container should have padding-right if grid has max-height and scro test('New virtual mode. A detail row should be rendered when the last master row is expanded', async (t) => { const dataGrid = new DataGrid('#container'); + const COLUMNS_AMOUNT = 100; + const COLUMN_HEIGHT = 48.5; // depends on theme await t.expect(dataGrid.isReady()).ok(); // act - await dataGrid.scrollTo(t, { top: 3300 }); + await dataGrid.scrollTo(t, { top: COLUMNS_AMOUNT * COLUMN_HEIGHT }); await t .wait(300) .click(dataGrid.getDataRow(99).getCommandCell(0).element); @@ -525,11 +527,11 @@ test('New virtual mode. A detail row should be rendered when the last master row .expect(penultimateRow.rowType) .eql('data') .expect(penultimateRow.key) - .eql(100) + .eql(COLUMNS_AMOUNT) .expect(lastRow.rowType) .eql('detail') .expect(lastRow.key) - .eql(100); + .eql(COLUMNS_AMOUNT); }).before(async () => { const getItems = (): Record[] => { const items: Record[] = []; From f8a82f7a96d8423c1473e6ccbcf0f3d1203e9c4a Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Mon, 2 Feb 2026 18:38:52 +0400 Subject: [PATCH 04/10] fix the third skipped test --- e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index e069324c4bab..8e65fc140e56 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -562,9 +562,11 @@ test('New virtual mode. A detail row should be rendered when the last master row test('New virtual mode. An adaptive row should be rendered when the last row is expanded', async (t) => { const dataGrid = new DataGrid('#container'); + const COLUMNS_AMOUNT = 100; + const COLUMN_HEIGHT = 48.5; // depends on theme // act - await dataGrid.scrollTo(t, { top: 3300 }); + await dataGrid.scrollTo(t, { top: COLUMNS_AMOUNT * COLUMN_HEIGHT }); await t .wait(300) .click(dataGrid.getDataRow(99).getCommandCell(3).element); From 654bc32456645b9b800382e6d8b112092c14ab12 Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Mon, 2 Feb 2026 20:38:00 +0400 Subject: [PATCH 05/10] fix the fourth skipped test --- .../tests/dataGrid/common/scrolling.ts | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index 8e65fc140e56..1db247be2459 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -1,7 +1,7 @@ import { ClientFunction, Selector } from 'testcafe'; import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; import DataGrid from 'devextreme-testcafe-models/dataGrid'; -import { ClassNames as CLASS } from 'devextreme-testcafe-models/dataGrid/classNames'; +import { ClassNames } from 'devextreme-testcafe-models/dataGrid/classNames'; import { insertStylesheetRulesToPage } from '../../../helpers/domUtils'; import url from '../../../helpers/getPageUrl'; import { createWidget } from '../../../helpers/createWidget'; @@ -620,9 +620,11 @@ test('New virtual mode. An adaptive row should be rendered when the last row is test('New virtual mode. Virtual rows should not be in view port', async (t) => { const dataGrid = new DataGrid('#container'); + const virtualRowSelector = `.${ClassNames.virtualRow}`; + const dataRowSelector = `.${ClassNames.dataRow}`; const getVirtualRowInfo = ClientFunction(() => { const result: any = {}; - const $virtualRows = $((window as any).widget.element()).find(CLASS.virtualRow); + const $virtualRows = $((window as any).widget.element()).find(virtualRowSelector); result.count = $virtualRows.length; $virtualRows.each((index, el) => { @@ -634,17 +636,17 @@ test('New virtual mode. Virtual rows should not be in view port', async (t) => { }); return result; - }); + }, { dependencies: { virtualRowSelector } }); const getVisibleRowsHeight = ClientFunction(() => { let result = 0; - const $rows = $((window as any).widget.element()).find(CLASS.dataRow); + const $rows = $((window as any).widget.element()).find(dataRowSelector); $rows.each((_, el) => { result += $(el).height() ?? 0; }); return result; - }); + }, { dependencies: { dataRowSelector } }); await t.wait(350); let visibleRows = await dataGrid.apiGetVisibleRows(); @@ -654,16 +656,16 @@ test('New virtual mode. Virtual rows should not be in view port', async (t) => { // assert await t .expect(visibleRows.length) - .eql(20) + .eql(16) .expect(virtualRowInfo.count) .eql(1) .expect(virtualRowInfo[0].top >= visibleRowsHeight) .ok(); // act - await dataGrid.scrollTo(t, { top: 1580 }); + await dataGrid.scrollTo(t, { top: 2520 }); await t.wait(300); - await dataGrid.scrollTo(t, { top: 3250 }); + await dataGrid.scrollTo(t, { top: 4580 }); await t.wait(600); visibleRows = await dataGrid.apiGetVisibleRows(); @@ -676,16 +678,16 @@ test('New virtual mode. Virtual rows should not be in view port', async (t) => { // assert await t .expect(visibleRows.length) - .eql(10) + .eql(8) .expect(visibleRows[0].key) - .eql(91) + .eql(93) .expect(virtualRowInfo.count) .eql(1) .expect(bottomVirtualRowPosition <= topScrollPosition) .ok(); // act - await dataGrid.scrollTo(t, { top: 1580 }); + await dataGrid.scrollTo(t, { top: 2520 }); await t.wait(300); await dataGrid.scrollTo(t, { top: 0 }); await t.wait(300); @@ -697,7 +699,7 @@ test('New virtual mode. Virtual rows should not be in view port', async (t) => { // assert await t .expect(visibleRows.length) - .eql(10) + .eql(8) .expect(visibleRows[0].key) .eql(1) .expect(virtualRowInfo.count) @@ -741,7 +743,7 @@ test('New virtual mode. Virtual rows should not be in view port', async (t) => { return (window as any).myStore.totalCount(loadOptions); }, } as any, // todo check - height: 300, + height: 420, remoteOperations: true, scrolling: { mode: 'virtual', From bf9e6fa1cf6734418f8decc30a66dcf528a3b9ec Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Tue, 3 Feb 2026 00:12:28 +0400 Subject: [PATCH 06/10] fix the fifth skipped test --- .../tests/dataGrid/common/scrolling.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index 1db247be2459..171e61baa2bf 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -926,12 +926,12 @@ test.meta({ browserSize: [800, 800] })('Rows are rendered properly when window c .ok(); // act - await scrollWindowTo(3000); + await scrollWindowTo(3100); // assert await t .expect(getWindowScrollPosition()) - .eql(3000) + .eql(3100) .wait(300); visibleRows = await dataGrid.apiGetVisibleRows(); @@ -939,10 +939,10 @@ test.meta({ browserSize: [800, 800] })('Rows are rendered properly when window c // assert await t .expect(visibleRows.length) - .eql(26) - .expect(visibleRows[0].key > 30) + .eql(19) + .expect(visibleRows[0].key > 20) .ok() - .expect(visibleRows[25].key > 55) + .expect(visibleRows[18].key > 35) .ok(); // act @@ -954,12 +954,12 @@ test.meta({ browserSize: [800, 800] })('Rows are rendered properly when window c .eql(6000); // act - await scrollWindowTo(3000); + await scrollWindowTo(3100); // assert await t .expect(getWindowScrollPosition()) - .eql(3000) + .eql(3100) .wait(300); visibleRows = await dataGrid.apiGetVisibleRows(); @@ -967,10 +967,10 @@ test.meta({ browserSize: [800, 800] })('Rows are rendered properly when window c // assert await t .expect(visibleRows.length) - .eql(26) - .expect(visibleRows[0].key > 30) + .eql(19) + .expect(visibleRows[0].key > 20) .ok() - .expect(visibleRows[25].key > 55) + .expect(visibleRows[18].key > 35) .ok(); // act From 24744153a6803f8d368b244e1ffd1ced20e5f9bf Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Tue, 3 Feb 2026 09:04:04 +0400 Subject: [PATCH 07/10] rename vars --- .../tests/dataGrid/common/scrolling.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index 171e61baa2bf..aa14c4e85338 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -506,13 +506,13 @@ test('Header container should have padding-right if grid has max-height and scro test('New virtual mode. A detail row should be rendered when the last master row is expanded', async (t) => { const dataGrid = new DataGrid('#container'); - const COLUMNS_AMOUNT = 100; - const COLUMN_HEIGHT = 48.5; // depends on theme + const ROWS_AMOUNT = 100; + const ROW_HEIGHT = 48.5; // depends on theme await t.expect(dataGrid.isReady()).ok(); // act - await dataGrid.scrollTo(t, { top: COLUMNS_AMOUNT * COLUMN_HEIGHT }); + await dataGrid.scrollTo(t, { top: ROWS_AMOUNT * ROW_HEIGHT }); await t .wait(300) .click(dataGrid.getDataRow(99).getCommandCell(0).element); @@ -527,11 +527,11 @@ test('New virtual mode. A detail row should be rendered when the last master row .expect(penultimateRow.rowType) .eql('data') .expect(penultimateRow.key) - .eql(COLUMNS_AMOUNT) + .eql(ROWS_AMOUNT) .expect(lastRow.rowType) .eql('detail') .expect(lastRow.key) - .eql(COLUMNS_AMOUNT); + .eql(ROWS_AMOUNT); }).before(async () => { const getItems = (): Record[] => { const items: Record[] = []; @@ -562,11 +562,11 @@ test('New virtual mode. A detail row should be rendered when the last master row test('New virtual mode. An adaptive row should be rendered when the last row is expanded', async (t) => { const dataGrid = new DataGrid('#container'); - const COLUMNS_AMOUNT = 100; - const COLUMN_HEIGHT = 48.5; // depends on theme + const ROWS_AMOUNT = 100; + const ROW_HEIGHT = 48.5; // depends on theme // act - await dataGrid.scrollTo(t, { top: COLUMNS_AMOUNT * COLUMN_HEIGHT }); + await dataGrid.scrollTo(t, { top: ROWS_AMOUNT * ROW_HEIGHT }); await t .wait(300) .click(dataGrid.getDataRow(99).getCommandCell(3).element); @@ -581,11 +581,11 @@ test('New virtual mode. An adaptive row should be rendered when the last row is .expect(penultimateRow.rowType) .eql('data') .expect(penultimateRow.key) - .eql(100) + .eql(ROWS_AMOUNT) .expect(lastRow.rowType) .eql('detailAdaptive') .expect(lastRow.key) - .eql(100); + .eql(ROWS_AMOUNT); }).before(async () => { const getItems = (): Record[] => { const items: Record[] = []; From 993a7f9315ae80c15b691097c207709645601004 Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Tue, 3 Feb 2026 14:07:35 +0400 Subject: [PATCH 08/10] get rid of private option "loadingTimeout" in the first skipped test --- .../tests/dataGrid/common/scrolling.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index aa14c4e85338..90149aeb4fb5 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -227,7 +227,6 @@ test('DataGrid should not reset its top scroll position after cell modification test('Ungrouping after grouping should work correctly if row rendering mode is virtual', async (t) => { const dataGrid = new DataGrid('#container'); - await t.expect(dataGrid.isReady()).ok(); // act @@ -243,6 +242,7 @@ test('Ungrouping after grouping should work correctly if row rendering mode is v // act await dataGrid.apiColumnOption('group', 'groupIndex', 0); + await t.expect(dataGrid.isReady()).ok(); visibleRows = await dataGrid.apiGetVisibleRows(); // assert @@ -260,17 +260,16 @@ test('Ungrouping after grouping should work correctly if row rendering mode is v // act await dataGrid.apiColumnOption('group', 'groupIndex', 'undefined'); - - // assert + await t.expect(dataGrid.isReady()).ok(); const groupRow = dataGrid.getGroupRowSelector(); + // assert await t .expect(groupRow.exists) .notOk(); visibleRows = await dataGrid.apiGetVisibleRows(); - // assert await t .expect(visibleRows[0].rowType) .eql('data') @@ -290,7 +289,6 @@ test('Ungrouping after grouping should work correctly if row rendering mode is v }; return createWidget('dxDataGrid', { height: 500, - loadingTimeout: null, keyExpr: 'id', dataSource: getItems(), scrolling: { From 026ace2be4f1cb7643890eeaaf8d42611927a5c7 Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Tue, 3 Feb 2026 15:22:59 +0400 Subject: [PATCH 09/10] revert the last test changes as it will be fixed in a separate task --- e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index 90149aeb4fb5..d3179f39f148 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -1851,7 +1851,7 @@ test('DataGrid - The "row" parameter in the FocusedRowChanged event refers to a [true, false].forEach((nativeScroll) => { type TestCaseWindow = typeof window & { dataGridScrollableEventValues?: number[] }; - test(`Should not scroll back on top with virtual scrolling and adaptive master detail (nativeScroll: ${nativeScroll}) [T1278804]`, async (t) => { + test.meta({ unstable: true })(`Should not scroll back on top with virtual scrolling and adaptive master detail (nativeScroll: ${nativeScroll}) [T1278804]`, async (t) => { // NOTE: idx + 1 logic inside POM const adaptiveCellIdx = 101; const scrollValuesThreshold = 100; From 1d65e0261e1fc98423f7e649e791693fd8d236b1 Mon Sep 17 00:00:00 2001 From: Danil Mirgaev Date: Tue, 3 Feb 2026 17:08:41 +0400 Subject: [PATCH 10/10] launch theme dependant tests with forced theme --- .../tests/dataGrid/common/scrolling.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts index d3179f39f148..19c08564b6c4 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts @@ -225,7 +225,8 @@ test('DataGrid should not reset its top scroll position after cell modification }, })); -test('Ungrouping after grouping should work correctly if row rendering mode is virtual', async (t) => { +// Theme dependent test +test.meta({ runInTheme: Themes.fluentBlue })('Ungrouping after grouping should work correctly if row rendering mode is virtual', async (t) => { const dataGrid = new DataGrid('#container'); await t.expect(dataGrid.isReady()).ok(); @@ -616,7 +617,8 @@ test('New virtual mode. An adaptive row should be rendered when the last row is }); }); -test('New virtual mode. Virtual rows should not be in view port', async (t) => { +// Theme dependent test +test.meta({ runInTheme: Themes.fluentBlue })('New virtual mode. Virtual rows should not be in view port', async (t) => { const dataGrid = new DataGrid('#container'); const virtualRowSelector = `.${ClassNames.virtualRow}`; const dataRowSelector = `.${ClassNames.dataRow}`; @@ -897,7 +899,8 @@ test.meta({ browserSize: [800, 700] })('New mode. Rows should be rendered proper }); }); -test.meta({ browserSize: [800, 800] })('Rows are rendered properly when window content is scrolled (T1070388)', async (t) => { +// Theme dependent test +test.meta({ browserSize: [800, 800], runInTheme: Themes.fluentBlue })('Rows are rendered properly when window content is scrolled (T1070388)', async (t) => { const dataGrid = new DataGrid('#container'); await t.expect(dataGrid.isReady()).ok();