fix(editor): Fields reset after closing NDV when side panel NDV is also visible (no-changelog) (#18857)

This commit is contained in:
Suguru Inoue
2025-09-01 10:10:10 +02:00
committed by GitHub
parent 61f79319df
commit 280dd013ba
6 changed files with 73 additions and 28 deletions

View File

@@ -360,6 +360,10 @@ export class CanvasPage extends BasePage {
return this.page.getByTestId('canvas-wrapper');
}
toggleFocusPanelButton(): Locator {
return this.page.getByTestId('toggle-focus-panel-button');
}
// Actions
async addInitialNodeToCanvas(nodeName: string): Promise<void> {

View File

@@ -20,7 +20,7 @@ export class NodeDetailsViewPage extends BasePage {
}
getParameterByLabel(labelName: string) {
return this.page.locator('.parameter-item').filter({ hasText: labelName });
return this.getContainer().locator('.parameter-item').filter({ hasText: labelName });
}
/**

View File

@@ -0,0 +1,30 @@
import { test, expect } from '../../fixtures/base';
import type { TestRequirements } from '../../Types';
const requirements: TestRequirements = {
workflow: {
'Test_workflow_1.json': 'Test',
},
storage: {
N8N_EXPERIMENT_OVERRIDES: JSON.stringify({ ndv_in_focus_panel: 'variant' }),
},
};
test.describe('SUG-121 Fields reset after closing NDV', () => {
test('should preserve changes to parameters after closing NDV when focus panel is open', async ({
n8n,
setupRequirements,
}) => {
await setupRequirements(requirements);
await n8n.canvas.clickZoomToFitButton();
await n8n.canvas.toggleFocusPanelButton().click();
await n8n.canvas.canvasPane().click();
await n8n.canvas.nodeByName('Code').dblclick();
await n8n.ndv.getParameterByLabel('JavaScript').getByRole('textbox').fill('alert(1)');
await n8n.ndv.close();
await n8n.canvas.nodeByName('Code').dblclick();
await expect(n8n.ndv.getParameterByLabel('JavaScript').getByRole('textbox')).toHaveText(
'alert(1)',
);
});
});

View File

@@ -10,8 +10,18 @@ export async function setupTestRequirements(
context: BrowserContext,
requirements: TestRequirements,
): Promise<void> {
const n8n = new n8nPage(page);
// 0. Setup browser storage before creating a new page
if (requirements.storage) {
await context.addInitScript((storage) => {
// Set localStorage items
for (const [key, value] of Object.entries(storage)) {
window.localStorage.setItem(key, value);
}
}, requirements.storage);
}
const api = new ApiHelpers(context.request);
const n8n = new n8nPage(page, api);
// 1. Setup frontend settings override
if (requirements.config?.settings) {
@@ -57,14 +67,4 @@ export async function setupTestRequirements(
}
}
}
// 5. Setup browser storage
if (requirements.storage) {
await context.addInitScript((storage) => {
// Set localStorage items
for (const [key, value] of Object.entries(storage)) {
window.localStorage.setItem(key, value);
}
}, requirements.storage);
}
}