From 052b3abdd2ce2d54826a1f6a48d63b7b8c1c3ee9 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" <68295572+anna-shakhova@users.noreply.github.com> Date: Tue, 14 Jul 2026 11:43:07 +0200 Subject: [PATCH 1/3] Grids: fix unstable editing test --- .../editing/editing.functional_matrix.ts | 8 ++- .../dataGrid/common/editing/functional.ts | 54 +++++++++++-------- .../keyboardNavigation.functional.ts | 18 ++++++- .../dataGrid/sticky/common/withEditing.ts | 8 ++- 4 files changed, 63 insertions(+), 25 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts index 7ce5ea2e561a..aadf94bcebb0 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts @@ -167,6 +167,8 @@ const checkCellFocused = async ( } await t + .expect(editor?.element.exists) + .ok() .expect(editor?.element.focused) .eql(true); }; @@ -441,6 +443,8 @@ editingModes.forEach((mode) => { const cell = dataGrid.getDataCell(0, columnInfo.columnIndex); const editor = form ? new CellEditor(form.getItem(columnInfo.dataField)) : cell.getEditor(); + await t.expect(dataGrid.isReady()).ok(); + await clickCellEditor(t, mode, columnInfo, form, cell, editor); await setEditorValue(t, mode, columnInfo, editor); @@ -569,12 +573,14 @@ editingModes.forEach((mode) => { })); [true, false].forEach((repaintChangesOnly) => { - test.meta({ unstable: mode === 'batch' && !repaintChangesOnly })( + test( `Update cell value and focus next cell, mode: ${mode}, repaintChangesOnly: ${repaintChangesOnly}, useKeyboard: false`, async (t) => { const form = getEditForm(mode); let modifiedCellCount = mode === 'batch' ? 1 : 0; + await t.expect(dataGrid.isReady()).ok(); + for (const columnInfo of textColumnInfos) { const cell = dataGrid.getDataCell(0, columnInfo.columnIndex); const editor = form diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts index 4acd172ae7b2..afe21f03422a 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts @@ -362,6 +362,8 @@ test('Async Validation(Row) - Data is not saved when a dependant cell value beco test('Async Validation(Cell) - Only the last cell should be switched to edit mode', async (t) => { const dataGrid = new DataGrid('#container'); + const resolveValidation = ClientFunction(() => (window as any).deferred.resolve(true)); + await t.expect(dataGrid.isReady()).ok(); const cell0 = dataGrid.getDataCell(0, 0); @@ -374,33 +376,43 @@ test('Async Validation(Cell) - Only the last cell should be switched to edit mod .click(cell1.element) .expect(cell1.isFocused) .notOk('the second cell should not be focused') - .click(cell2.element) + .click(cell2.element); + + await resolveValidation(); + + await t .expect(cell0.isValidationPending) .notOk('validating is completed') .expect(cell2.hasHiddenFocusState) .notOk() .expect(cell2.isFocused) .ok('the third cell should be focused'); -}).before(async () => createWidget('dxDataGrid', getGridConfig({ - editing: { - mode: 'cell', - allowUpdating: true, - allowAdding: true, - }, - columns: [{ - dataField: 'age', - validationRules: [{ - type: 'async', - validationCallback(): JQueryPromise { - const d = $.Deferred(); - setTimeout(() => { - d.resolve(true); - }, 1000); - return d.promise(); - }, - }], - }, 'name', 'lastName'], -}))); +}).before(async () => { + await ClientFunction(() => { + (window as any).deferred = $.Deferred(); + })(); + + return createWidget('dxDataGrid', getGridConfig({ + editing: { + mode: 'cell', + allowUpdating: true, + allowAdding: true, + }, + columns: [{ + dataField: 'age', + validationRules: [{ + type: 'async', + validationCallback(): JQueryPromise { + return (window as any).deferred.promise(); + }, + }], + }, 'name', 'lastName'], + })); +}).after(async () => { + await ClientFunction(() => { + delete (window as any).deferred; + })(); +}); test('Async Validation(Cell) - Only valid data is saved in a new row', async (t) => { const dataGrid = new DataGrid('#container'); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts index babebbccc004..8346a6cd5410 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts @@ -1703,6 +1703,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .click(addRowButton) .expect(cell00.isFocused).ok() + .expect(editor00.element.exists) + .ok() .expect(editor00.element.focused) .ok() @@ -1715,6 +1717,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .eql('1') .expect(cell01.isFocused) .ok() + .expect(editor01.element.exists) + .ok() .expect(editor01.element.focused) .ok() @@ -1749,6 +1753,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .click(cell01.element) .expect(cell01.isFocused).ok() + .expect(editor01.element.exists) + .ok() .expect(editor01.element.focused) .ok() @@ -1761,6 +1767,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .eql('2') .expect(cell00.isFocused) .ok() + .expect(editor00.element.exists) + .ok() .expect(editor00.element.focused) .ok() @@ -1780,7 +1788,7 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' columns: ['a', 'b'], })); - test.meta({ unstable: editMode === 'Cell' })(`${editMode} mode - Cells in a modified row should be updated on Tab (T898356)`, async (t) => { + test(`${editMode} mode - Cells in a modified row should be updated on Tab (T898356)`, async (t) => { const dataGrid = new DataGrid('#container') as any; const cell00 = dataGrid.getDataCell(0, 0); const editor00 = cell00.getEditor(); @@ -1793,6 +1801,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .click(cell00.element) .expect(cell00.isFocused).ok() + .expect(editor00.element.exists) + .ok() .expect(editor00.element.focused) .ok() @@ -1805,6 +1815,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .eql('11') .expect(cell01.isFocused) .ok() + .expect(editor01.element.exists) + .ok() .expect(editor01.element.focused) .ok() @@ -1837,6 +1849,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .click(cell01.element) .expect(cell01.isFocused).ok() + .expect(editor01.element.exists) + .ok() .expect(editor01.element.focused) .ok() @@ -1849,6 +1863,8 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' .eql('22') .expect(cell00.isFocused) .ok() + .expect(editor00.element.exists) + .ok() .expect(editor00.element.focused) .ok() diff --git a/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts b/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts index 8224ad4294fe..a05230f98020 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts @@ -68,13 +68,17 @@ test.meta({ browserSize: [800, 800] })('The form edit mode: Edit row when there }, })); -test.meta({ browserSize: [800, 800] })('The batch edit mode: Edit cell whene there are sticky columns', async (t) => { +test.meta({ browserSize: [800, 800] })('The batch edit mode: Edit cell when there are sticky columns', async (t) => { const { takeScreenshot, compareResults } = createScreenshotsComparer(t); const dataGrid = new DataGrid(DATA_GRID_SELECTOR); await t.expect(dataGrid.isReady()).ok(); - await t.click(dataGrid.getDataCell(0, 2).element); + const editCell = dataGrid.getDataCell(0, 2); + await t.click(editCell.element); + await t + .expect(editCell.isEditCell).ok() + .expect(editCell.getEditor().element.focused).ok(); await testScreenshot(t, takeScreenshot, 'edit_cell_with_sticky_columns_1.png', { element: dataGrid.element }); From 010978154073d93d72f115c4a6a0b63e44e51ac8 Mon Sep 17 00:00:00 2001 From: Eldar Iusupzhanov Date: Fri, 17 Jul 2026 14:23:17 +0600 Subject: [PATCH 2/3] temp --- .../editing/editing.functional_matrix.ts | 50 +-- .../dataGrid/common/editing/functional.ts | 96 ++--- .../keyboardNavigation.functional.ts | 328 +++++++++--------- .../dataGrid/sticky/common/withEditing.ts | 60 ++-- 4 files changed, 271 insertions(+), 263 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts index aadf94bcebb0..456327faf442 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts @@ -573,35 +573,37 @@ editingModes.forEach((mode) => { })); [true, false].forEach((repaintChangesOnly) => { - test( - `Update cell value and focus next cell, mode: ${mode}, repaintChangesOnly: ${repaintChangesOnly}, useKeyboard: false`, - async (t) => { - const form = getEditForm(mode); - let modifiedCellCount = mode === 'batch' ? 1 : 0; + for (let i = 0; i < 50; i++) { + test( + `Update cell value and focus next cell, mode: ${mode}, repaintChangesOnly: ${repaintChangesOnly}, useKeyboard: false`, + async (t) => { + const form = getEditForm(mode); + let modifiedCellCount = mode === 'batch' ? 1 : 0; - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - for (const columnInfo of textColumnInfos) { - const cell = dataGrid.getDataCell(0, columnInfo.columnIndex); - const editor = form - ? new CellEditor(form.getItem(columnInfo.dataField)) - : cell.getEditor(); + for (const columnInfo of textColumnInfos) { + const cell = dataGrid.getDataCell(0, columnInfo.columnIndex); + const editor = form + ? new CellEditor(form.getItem(columnInfo.dataField)) + : cell.getEditor(); - await clickCellEditor(t, mode, columnInfo, form, cell, editor); - await setEditorValue(t, mode, columnInfo, editor); + await clickCellEditor(t, mode, columnInfo, form, cell, editor); + await setEditorValue(t, mode, columnInfo, editor); - await focusNextCellEditor(t, mode, columnInfo); + await focusNextCellEditor(t, mode, columnInfo); - if (mode === 'batch') { - modifiedCellCount += 1; - } + if (mode === 'batch') { + modifiedCellCount += 1; + } - await checkModifiedCell(t, mode, columnInfo, cell, editor, modifiedCellCount); - } - }, - ).before(createDataGrid({ - mode, - repaintChangesOnly, - })); + await checkModifiedCell(t, mode, columnInfo, cell, editor, modifiedCellCount); + } + }, + ).before(createDataGrid({ + mode, + repaintChangesOnly, + })); + } }); }); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts index afe21f03422a..d28af7012ff3 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/functional.ts @@ -360,59 +360,61 @@ test('Async Validation(Row) - Data is not saved when a dependant cell value beco }, 'lastName'], }))); -test('Async Validation(Cell) - Only the last cell should be switched to edit mode', async (t) => { - const dataGrid = new DataGrid('#container'); - const resolveValidation = ClientFunction(() => (window as any).deferred.resolve(true)); +for (let i = 0; i < 50; i++) { + test(`${i}: ` + 'Async Validation(Cell) - Only the last cell should be switched to edit mode', async (t) => { + const dataGrid = new DataGrid('#container'); + const resolveValidation = ClientFunction(() => (window as any).deferred.resolve(true)); - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - const cell0 = dataGrid.getDataCell(0, 0); - const cell1 = dataGrid.getDataCell(0, 1); - const cell2 = dataGrid.getDataCell(0, 2); + const cell0 = dataGrid.getDataCell(0, 0); + const cell1 = dataGrid.getDataCell(0, 1); + const cell2 = dataGrid.getDataCell(0, 2); - await t - .click(cell0.element) - .expect(cell0.isValidationPending).ok() - .click(cell1.element) - .expect(cell1.isFocused) - .notOk('the second cell should not be focused') - .click(cell2.element); + await t + .click(cell0.element) + .expect(cell0.isValidationPending).ok() + .click(cell1.element) + .expect(cell1.isFocused) + .notOk('the second cell should not be focused') + .click(cell2.element); - await resolveValidation(); + await resolveValidation(); - await t - .expect(cell0.isValidationPending) - .notOk('validating is completed') - .expect(cell2.hasHiddenFocusState) - .notOk() - .expect(cell2.isFocused) - .ok('the third cell should be focused'); -}).before(async () => { - await ClientFunction(() => { - (window as any).deferred = $.Deferred(); - })(); + await t + .expect(cell0.isValidationPending) + .notOk('validating is completed') + .expect(cell2.hasHiddenFocusState) + .notOk() + .expect(cell2.isFocused) + .ok('the third cell should be focused'); + }).before(async () => { + await ClientFunction(() => { + (window as any).deferred = $.Deferred(); + })(); - return createWidget('dxDataGrid', getGridConfig({ - editing: { - mode: 'cell', - allowUpdating: true, - allowAdding: true, - }, - columns: [{ - dataField: 'age', - validationRules: [{ - type: 'async', - validationCallback(): JQueryPromise { - return (window as any).deferred.promise(); - }, - }], - }, 'name', 'lastName'], - })); -}).after(async () => { - await ClientFunction(() => { - delete (window as any).deferred; - })(); -}); + return createWidget('dxDataGrid', getGridConfig({ + editing: { + mode: 'cell', + allowUpdating: true, + allowAdding: true, + }, + columns: [{ + dataField: 'age', + validationRules: [{ + type: 'async', + validationCallback(): JQueryPromise { + return (window as any).deferred.promise(); + }, + }], + }, 'name', 'lastName'], + })); + }).after(async () => { + await ClientFunction(() => { + delete (window as any).deferred; + })(); + }); +} test('Async Validation(Cell) - Only valid data is saved in a new row', async (t) => { const dataGrid = new DataGrid('#container'); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts index 8346a6cd5410..d24e9b941fcf 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts @@ -1689,200 +1689,202 @@ test('The expand cell should not lose focus on expanding a master row (T892203)' })); ['Batch', 'Cell'].forEach((editMode) => { - test(`${editMode} mode - Cells in a new row should be updated on Tab (T898356)`, async (t) => { - const dataGrid = new DataGrid('#container') as any; - const addRowButton = dataGrid.getHeaderPanel().getAddRowButton(); - const cell00 = dataGrid.getDataCell(0, 0); - const editor00 = cell00.getEditor(); - const cell01 = dataGrid.getDataCell(0, 1); - const editor01 = cell01.getEditor(); + for (let i = 0; i < 50; i++) { + test(`${i}: ${editMode} mode - Cells in a new row should be updated on Tab (T898356)`, async (t) => { + const dataGrid = new DataGrid('#container') as any; + const addRowButton = dataGrid.getHeaderPanel().getAddRowButton(); + const cell00 = dataGrid.getDataCell(0, 0); + const editor00 = cell00.getEditor(); + const cell01 = dataGrid.getDataCell(0, 1); + const editor01 = cell01.getEditor(); - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - await t - .click(addRowButton) + await t + .click(addRowButton) - .expect(cell00.isFocused).ok() - .expect(editor00.element.exists) - .ok() - .expect(editor00.element.focused) - .ok() + .expect(cell00.isFocused).ok() + .expect(editor00.element.exists) + .ok() + .expect(editor00.element.focused) + .ok() - .typeText(editor00.element, '1') - .pressKey('tab') + .typeText(editor00.element, '1') + .pressKey('tab') - .expect(cell00.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 0)) - .eql('1') - .expect(cell01.isFocused) - .ok() - .expect(editor01.element.exists) - .ok() - .expect(editor01.element.focused) - .ok() + .expect(cell00.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 0)) + .eql('1') + .expect(cell01.isFocused) + .ok() + .expect(editor01.element.exists) + .ok() + .expect(editor01.element.focused) + .ok() - .typeText(editor01.element, '2') - .pressKey('tab') + .typeText(editor01.element, '2') + .pressKey('tab') - .expect(cell01.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 1)) - .eql('2'); - }).before(async () => createWidget('dxDataGrid', { - dataSource: [], - editing: { - mode: editMode.toLowerCase() as any, - allowAdding: true, - }, - columns: ['a', 'b'], - })); + .expect(cell01.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 1)) + .eql('2'); + }).before(async () => createWidget('dxDataGrid', { + dataSource: [], + editing: { + mode: editMode.toLowerCase() as any, + allowAdding: true, + }, + columns: ['a', 'b'], + })); - test(`${editMode} mode - Cells in a new row should be updated on Shift+Tab (T898356)`, async (t) => { - const dataGrid = new DataGrid('#container') as any; - const addRowButton = dataGrid.getHeaderPanel().getAddRowButton(); - const cell00 = dataGrid.getDataCell(0, 0); - const editor00 = cell00.getEditor(); - const cell01 = dataGrid.getDataCell(0, 1); - const editor01 = cell01.getEditor(); + test(`${i}: ${editMode} mode - Cells in a new row should be updated on Shift+Tab (T898356)`, async (t) => { + const dataGrid = new DataGrid('#container') as any; + const addRowButton = dataGrid.getHeaderPanel().getAddRowButton(); + const cell00 = dataGrid.getDataCell(0, 0); + const editor00 = cell00.getEditor(); + const cell01 = dataGrid.getDataCell(0, 1); + const editor01 = cell01.getEditor(); - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - await t - .click(addRowButton) - .click(cell01.element) + await t + .click(addRowButton) + .click(cell01.element) - .expect(cell01.isFocused).ok() - .expect(editor01.element.exists) - .ok() - .expect(editor01.element.focused) - .ok() + .expect(cell01.isFocused).ok() + .expect(editor01.element.exists) + .ok() + .expect(editor01.element.focused) + .ok() - .typeText(editor01.element, '2') - .pressKey('shift+tab') + .typeText(editor01.element, '2') + .pressKey('shift+tab') - .expect(cell01.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 1)) - .eql('2') - .expect(cell00.isFocused) - .ok() - .expect(editor00.element.exists) - .ok() - .expect(editor00.element.focused) - .ok() + .expect(cell01.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 1)) + .eql('2') + .expect(cell00.isFocused) + .ok() + .expect(editor00.element.exists) + .ok() + .expect(editor00.element.focused) + .ok() - .typeText(editor00.element, '1') - .pressKey('shift+tab') + .typeText(editor00.element, '1') + .pressKey('shift+tab') - .expect(cell00.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 0)) - .eql('1'); - }).before(async () => createWidget('dxDataGrid', { - dataSource: [], - editing: { - mode: editMode.toLowerCase() as any, - allowAdding: true, - }, - columns: ['a', 'b'], - })); + .expect(cell00.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 0)) + .eql('1'); + }).before(async () => createWidget('dxDataGrid', { + dataSource: [], + editing: { + mode: editMode.toLowerCase() as any, + allowAdding: true, + }, + columns: ['a', 'b'], + })); - test(`${editMode} mode - Cells in a modified row should be updated on Tab (T898356)`, async (t) => { - const dataGrid = new DataGrid('#container') as any; - const cell00 = dataGrid.getDataCell(0, 0); - const editor00 = cell00.getEditor(); - const cell01 = dataGrid.getDataCell(0, 1); - const editor01 = cell01.getEditor(); + test(`${editMode} mode - Cells in a modified row should be updated on Tab (T898356)`, async (t) => { + const dataGrid = new DataGrid('#container') as any; + const cell00 = dataGrid.getDataCell(0, 0); + const editor00 = cell00.getEditor(); + const cell01 = dataGrid.getDataCell(0, 1); + const editor01 = cell01.getEditor(); - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - await t - .click(cell00.element) + await t + .click(cell00.element) - .expect(cell00.isFocused).ok() - .expect(editor00.element.exists) - .ok() - .expect(editor00.element.focused) - .ok() + .expect(cell00.isFocused).ok() + .expect(editor00.element.exists) + .ok() + .expect(editor00.element.focused) + .ok() - .typeText(editor00.element, '1') - .pressKey('tab') + .typeText(editor00.element, '1') + .pressKey('tab') - .expect(cell00.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 0)) - .eql('11') - .expect(cell01.isFocused) - .ok() - .expect(editor01.element.exists) - .ok() - .expect(editor01.element.focused) - .ok() + .expect(cell00.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 0)) + .eql('11') + .expect(cell01.isFocused) + .ok() + .expect(editor01.element.exists) + .ok() + .expect(editor01.element.focused) + .ok() - .typeText(editor01.element, '2') - .pressKey('tab') + .typeText(editor01.element, '2') + .pressKey('tab') - .expect(cell01.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 1)) - .eql('22'); - }).before(async () => createWidget('dxDataGrid', { - dataSource: [{ a: '1', b: '2' }], - editing: { - mode: editMode.toLowerCase() as any, - allowUpdating: true, - }, - columns: ['a', 'b'], - })); + .expect(cell01.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 1)) + .eql('22'); + }).before(async () => createWidget('dxDataGrid', { + dataSource: [{ a: '1', b: '2' }], + editing: { + mode: editMode.toLowerCase() as any, + allowUpdating: true, + }, + columns: ['a', 'b'], + })); - test(`${editMode} mode - Cells in a modified row should be updated on Shift+Tab (T898356)`, async (t) => { - const dataGrid = new DataGrid('#container') as any; - const cell00 = dataGrid.getDataCell(0, 0); - const editor00 = cell00.getEditor(); - const cell01 = dataGrid.getDataCell(0, 1); - const editor01 = cell01.getEditor(); + test(`${editMode} mode - Cells in a modified row should be updated on Shift+Tab (T898356)`, async (t) => { + const dataGrid = new DataGrid('#container') as any; + const cell00 = dataGrid.getDataCell(0, 0); + const editor00 = cell00.getEditor(); + const cell01 = dataGrid.getDataCell(0, 1); + const editor01 = cell01.getEditor(); - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - await t - .click(cell01.element) + await t + .click(cell01.element) - .expect(cell01.isFocused).ok() - .expect(editor01.element.exists) - .ok() - .expect(editor01.element.focused) - .ok() + .expect(cell01.isFocused).ok() + .expect(editor01.element.exists) + .ok() + .expect(editor01.element.focused) + .ok() - .typeText(editor01.element, '2') - .pressKey('shift+tab') + .typeText(editor01.element, '2') + .pressKey('shift+tab') - .expect(cell01.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 1)) - .eql('22') - .expect(cell00.isFocused) - .ok() - .expect(editor00.element.exists) - .ok() - .expect(editor00.element.focused) - .ok() + .expect(cell01.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 1)) + .eql('22') + .expect(cell00.isFocused) + .ok() + .expect(editor00.element.exists) + .ok() + .expect(editor00.element.focused) + .ok() - .typeText(editor00.element, '1') - .pressKey('shift+tab') + .typeText(editor00.element, '1') + .pressKey('shift+tab') - .expect(cell00.isFocused) - .notOk() - .expect(dataGrid.apiGetCellValue(0, 0)) - .eql('11'); - }).before(async () => createWidget('dxDataGrid', { - dataSource: [{ a: '1', b: '2' }], - editing: { - mode: editMode.toLowerCase() as any, - allowUpdating: true, - }, - columns: ['a', 'b'], - })); + .expect(cell00.isFocused) + .notOk() + .expect(dataGrid.apiGetCellValue(0, 0)) + .eql('11'); + }).before(async () => createWidget('dxDataGrid', { + dataSource: [{ a: '1', b: '2' }], + editing: { + mode: editMode.toLowerCase() as any, + allowUpdating: true, + }, + columns: ['a', 'b'], + })); + } test(`${editMode} mode - Shift+Tab from the first editable cell should move focus to the last header (T1329750)`, async (t) => { const dataGrid = new DataGrid('#container') as any; diff --git a/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts b/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts index a05230f98020..f66e4ccbc883 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withEditing.ts @@ -68,41 +68,43 @@ test.meta({ browserSize: [800, 800] })('The form edit mode: Edit row when there }, })); -test.meta({ browserSize: [800, 800] })('The batch edit mode: Edit cell when there are sticky columns', async (t) => { - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const dataGrid = new DataGrid(DATA_GRID_SELECTOR); +for (let i = 0; i < 50; i++) { + test.meta({ browserSize: [800, 800] })(`${i}: ` + 'The batch edit mode: Edit cell when there are sticky columns', async (t) => { + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + const dataGrid = new DataGrid(DATA_GRID_SELECTOR); - await t.expect(dataGrid.isReady()).ok(); + await t.expect(dataGrid.isReady()).ok(); - const editCell = dataGrid.getDataCell(0, 2); - await t.click(editCell.element); - await t - .expect(editCell.isEditCell).ok() - .expect(editCell.getEditor().element.focused).ok(); + const editCell = dataGrid.getDataCell(0, 2); + await t.click(editCell.element); + await t + .expect(editCell.isEditCell).ok() + .expect(editCell.getEditor().element.focused).ok(); - await testScreenshot(t, takeScreenshot, 'edit_cell_with_sticky_columns_1.png', { element: dataGrid.element }); + await testScreenshot(t, takeScreenshot, 'edit_cell_with_sticky_columns_1.png', { element: dataGrid.element }); - await dataGrid.scrollTo(t, { x: 10000 }); + await dataGrid.scrollTo(t, { x: 10000 }); - await testScreenshot(t, takeScreenshot, 'edit_cell_with_sticky_columns_2.png', { element: dataGrid.element }); + await testScreenshot(t, takeScreenshot, 'edit_cell_with_sticky_columns_2.png', { element: dataGrid.element }); - await t - .expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => createWidget('dxDataGrid', { - ...defaultConfig, - editing: { - mode: 'batch', - allowUpdating: true, - }, - customizeColumns(columns) { - columns[1].fixed = true; - columns[1].fixedPosition = 'left'; - }, - scrolling: { - showScrollbar: 'never', - }, -})); + await t + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); + }).before(async () => createWidget('dxDataGrid', { + ...defaultConfig, + editing: { + mode: 'batch', + allowUpdating: true, + }, + customizeColumns(columns) { + columns[1].fixed = true; + columns[1].fixedPosition = 'left'; + }, + scrolling: { + showScrollbar: 'never', + }, + })); +} test.meta({ browserSize: [800, 800] })('The batch edit mode: Edit fixed cell', async (t) => { const { takeScreenshot, compareResults } = createScreenshotsComparer(t); From 6c9811a00353bb34a4d0c41e88a152a6f663d85e Mon Sep 17 00:00:00 2001 From: Eldar Iusupzhanov Date: Fri, 17 Jul 2026 14:24:51 +0600 Subject: [PATCH 3/3] temp --- .../tests/dataGrid/common/editing/editing.functional_matrix.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts index 456327faf442..5ccf400a6619 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/common/editing/editing.functional_matrix.ts @@ -575,7 +575,7 @@ editingModes.forEach((mode) => { [true, false].forEach((repaintChangesOnly) => { for (let i = 0; i < 50; i++) { test( - `Update cell value and focus next cell, mode: ${mode}, repaintChangesOnly: ${repaintChangesOnly}, useKeyboard: false`, + `${i}: Update cell value and focus next cell, mode: ${mode}, repaintChangesOnly: ${repaintChangesOnly}, useKeyboard: false`, async (t) => { const form = getEditForm(mode); let modifiedCellCount = mode === 'batch' ? 1 : 0;