diff --git a/browser_tests/fixtures/components/Topbar.ts b/browser_tests/fixtures/components/Topbar.ts index 81fcf6764..b138ff7b7 100644 --- a/browser_tests/fixtures/components/Topbar.ts +++ b/browser_tests/fixtures/components/Topbar.ts @@ -50,7 +50,7 @@ export class Topbar { workflowName: string, command: 'Save' | 'Save As' | 'Export' ) { - await this.triggerTopbarCommand(['Workflow', command]) + await this.triggerTopbarCommand(['File', command]) await this.getSaveDialog().fill(workflowName) await this.page.keyboard.press('Enter') @@ -72,8 +72,8 @@ export class Topbar { } async triggerTopbarCommand(path: string[]) { - if (path.length < 2) { - throw new Error('Path is too short') + if (path.length < 1) { + throw new Error('Path cannot be empty') } const menu = await this.openTopbarMenu() @@ -85,6 +85,13 @@ export class Topbar { .locator('.p-tieredmenu-item') .filter({ has: topLevelMenuItem }) await topLevelMenu.waitFor({ state: 'visible' }) + + // Handle top-level commands (like "New") + if (path.length === 1) { + await topLevelMenuItem.click() + return + } + await topLevelMenu.hover() let currentMenu = topLevelMenu diff --git a/browser_tests/tests/groupNode.spec.ts b/browser_tests/tests/groupNode.spec.ts index a6cb1e67f..fb282e6a7 100644 --- a/browser_tests/tests/groupNode.spec.ts +++ b/browser_tests/tests/groupNode.spec.ts @@ -268,10 +268,7 @@ test.describe('Group Node', () => { await comfyPage.setSetting('Comfy.ConfirmClear', false) // Clear workflow - await comfyPage.menu.topbar.triggerTopbarCommand([ - 'Edit', - 'Clear Workflow' - ]) + await comfyPage.executeCommand('Comfy.ClearWorkflow') await comfyPage.ctrlV() await verifyNodeLoaded(comfyPage, 1) @@ -280,7 +277,7 @@ test.describe('Group Node', () => { test('Copies and pastes group node into a newly created blank workflow', async ({ comfyPage }) => { - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) await comfyPage.ctrlV() await verifyNodeLoaded(comfyPage, 1) }) @@ -296,7 +293,7 @@ test.describe('Group Node', () => { test('Serializes group node after copy and paste across workflows', async ({ comfyPage }) => { - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) await comfyPage.ctrlV() const currentGraphState = await comfyPage.page.evaluate(() => window['app'].graph.serialize() diff --git a/browser_tests/tests/interaction.spec.ts b/browser_tests/tests/interaction.spec.ts index a19248c2e..934107792 100644 --- a/browser_tests/tests/interaction.spec.ts +++ b/browser_tests/tests/interaction.spec.ts @@ -684,7 +684,7 @@ test.describe('Load workflow', () => { workflowA = generateUniqueFilename() await comfyPage.menu.topbar.saveWorkflow(workflowA) workflowB = generateUniqueFilename() - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) await comfyPage.menu.topbar.saveWorkflow(workflowB) // Wait for localStorage to persist the workflow paths before reloading diff --git a/browser_tests/tests/menu.spec.ts b/browser_tests/tests/menu.spec.ts index a771257f2..1eabe222c 100644 --- a/browser_tests/tests/menu.spec.ts +++ b/browser_tests/tests/menu.spec.ts @@ -75,7 +75,7 @@ test.describe('Menu', () => { test('Displays keybinding next to item', async ({ comfyPage }) => { await comfyPage.menu.topbar.openTopbarMenu() - const workflowMenuItem = comfyPage.menu.topbar.getMenuItem('Workflow') + const workflowMenuItem = comfyPage.menu.topbar.getMenuItem('File') await workflowMenuItem.hover() const exportTag = comfyPage.page.locator('.keybinding-tag', { hasText: 'Ctrl + s' diff --git a/browser_tests/tests/rerouteNode.spec.ts b/browser_tests/tests/rerouteNode.spec.ts index 981f62a07..fb39f208e 100644 --- a/browser_tests/tests/rerouteNode.spec.ts +++ b/browser_tests/tests/rerouteNode.spec.ts @@ -18,7 +18,7 @@ test.describe('Reroute Node', () => { [workflowName]: workflowName }) await comfyPage.setup() - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) // Insert the workflow const workflowsTab = comfyPage.menu.workflowsTab diff --git a/browser_tests/tests/workflowTabThumbnail.spec.ts b/browser_tests/tests/workflowTabThumbnail.spec.ts index a1869430b..31b15067f 100644 --- a/browser_tests/tests/workflowTabThumbnail.spec.ts +++ b/browser_tests/tests/workflowTabThumbnail.spec.ts @@ -63,7 +63,7 @@ test.describe('Workflow Tab Thumbnails', () => { test('Should show thumbnail when hovering over a non-active tab', async ({ comfyPage }) => { - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) const thumbnailImg = await getTabThumbnailImage( comfyPage, 0, @@ -73,7 +73,7 @@ test.describe('Workflow Tab Thumbnails', () => { }) test('Should not show thumbnail for active tab', async ({ comfyPage }) => { - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) const thumbnailImg = await getTabThumbnailImage( comfyPage, 1, @@ -105,7 +105,7 @@ test.describe('Workflow Tab Thumbnails', () => { await comfyPage.nextFrame() // Create a new workflow (tab 1) which will be empty - await comfyPage.menu.topbar.triggerTopbarCommand(['Workflow', 'New']) + await comfyPage.menu.topbar.triggerTopbarCommand(['New']) await comfyPage.nextFrame() // Now we have two tabs: tab 0 (default workflow with nodes) and tab 1 (empty) diff --git a/src/components/sidebar/SidebarHelpCenterIcon.vue b/src/components/sidebar/SidebarHelpCenterIcon.vue index c37cd973e..1a15b8487 100644 --- a/src/components/sidebar/SidebarHelpCenterIcon.vue +++ b/src/components/sidebar/SidebarHelpCenterIcon.vue @@ -58,11 +58,12 @@