diff --git a/browser_tests/fixtures/selectors.ts b/browser_tests/fixtures/selectors.ts
index 0fecdbeefe9..765ba31961f 100644
--- a/browser_tests/fixtures/selectors.ts
+++ b/browser_tests/fixtures/selectors.ts
@@ -28,10 +28,15 @@ export const TestIds = {
settingsTabAbout: 'settings-tab-about',
confirm: 'confirm-dialog',
errorOverlay: 'error-overlay',
+ errorOverlaySeeErrors: 'error-overlay-see-errors',
runtimeErrorPanel: 'runtime-error-panel',
missingNodeCard: 'missing-node-card',
+ errorCardFindOnGithub: 'error-card-find-on-github',
+ errorCardCopy: 'error-card-copy',
about: 'about-panel',
- whatsNewSection: 'whats-new-section'
+ whatsNewSection: 'whats-new-section',
+ missingNodePacksGroup: 'error-group-missing-node',
+ missingModelsGroup: 'error-group-missing-model'
},
keybindings: {
presetMenu: 'keybinding-preset-menu'
@@ -76,6 +81,10 @@ export const TestIds = {
},
user: {
currentUserIndicator: 'current-user-indicator'
+ },
+ errors: {
+ imageLoadError: 'error-loading-image',
+ videoLoadError: 'error-loading-video'
}
} as const
@@ -101,3 +110,4 @@ export type TestIdValue =
(id: string) => string
>
| (typeof TestIds.user)[keyof typeof TestIds.user]
+ | (typeof TestIds.errors)[keyof typeof TestIds.errors]
diff --git a/browser_tests/tests/dialog.spec.ts b/browser_tests/tests/dialog.spec.ts
index 03111e0896b..809c44d64cf 100644
--- a/browser_tests/tests/dialog.spec.ts
+++ b/browser_tests/tests/dialog.spec.ts
@@ -28,7 +28,7 @@ test.describe('Missing nodes in Error Overlay', { tag: '@ui' }, () => {
)
await expect(errorOverlay).toBeVisible()
- const missingNodesTitle = comfyPage.page.getByText(/Missing Node Packs/)
+ const missingNodesTitle = errorOverlay.getByText(/Missing Node Packs/)
await expect(missingNodesTitle).toBeVisible()
})
@@ -42,11 +42,13 @@ test.describe('Missing nodes in Error Overlay', { tag: '@ui' }, () => {
)
await expect(errorOverlay).toBeVisible()
- const missingNodesTitle = comfyPage.page.getByText(/Missing Node Packs/)
+ const missingNodesTitle = errorOverlay.getByText(/Missing Node Packs/)
await expect(missingNodesTitle).toBeVisible()
// Click "See Errors" to open the errors tab and verify subgraph node content
- await errorOverlay.getByRole('button', { name: 'See Errors' }).click()
+ await errorOverlay
+ .getByTestId(TestIds.dialogs.errorOverlaySeeErrors)
+ .click()
await expect(errorOverlay).not.toBeVisible()
const missingNodeCard = comfyPage.page.getByTestId(
@@ -75,7 +77,9 @@ test.describe('Missing nodes in Error Overlay', { tag: '@ui' }, () => {
await expect(errorOverlay).toBeVisible()
// Click "See Errors" to open the right side panel errors tab
- await errorOverlay.getByRole('button', { name: 'See Errors' }).click()
+ await errorOverlay
+ .getByTestId(TestIds.dialogs.errorOverlaySeeErrors)
+ .click()
await expect(errorOverlay).not.toBeVisible()
// Verify MissingNodeCard is rendered in the errors tab
@@ -165,17 +169,19 @@ test.describe('Error actions in Errors Tab', { tag: '@ui' }, () => {
TestIds.dialogs.errorOverlay
)
await expect(errorOverlay).toBeVisible()
- await errorOverlay.getByRole('button', { name: 'See Errors' }).click()
+ await errorOverlay
+ .getByTestId(TestIds.dialogs.errorOverlaySeeErrors)
+ .click()
await expect(errorOverlay).not.toBeVisible()
// Verify Find on GitHub button is present in the error card
- const findOnGithubButton = comfyPage.page.getByRole('button', {
- name: 'Find on GitHub'
- })
+ const findOnGithubButton = comfyPage.page.getByTestId(
+ TestIds.dialogs.errorCardFindOnGithub
+ )
await expect(findOnGithubButton).toBeVisible()
// Verify Copy button is present in the error card
- const copyButton = comfyPage.page.getByRole('button', { name: 'Copy' })
+ const copyButton = comfyPage.page.getByTestId(TestIds.dialogs.errorCardCopy)
await expect(copyButton).toBeVisible()
})
})
@@ -204,7 +210,7 @@ test.describe('Missing models in Error Tab', () => {
)
await expect(errorOverlay).toBeVisible()
- const missingModelsTitle = comfyPage.page.getByText(/Missing Models/)
+ const missingModelsTitle = errorOverlay.getByText(/Missing Models/)
await expect(missingModelsTitle).toBeVisible()
})
@@ -220,7 +226,7 @@ test.describe('Missing models in Error Tab', () => {
)
await expect(errorOverlay).toBeVisible()
- const missingModelsTitle = comfyPage.page.getByText(/Missing Models/)
+ const missingModelsTitle = errorOverlay.getByText(/Missing Models/)
await expect(missingModelsTitle).toBeVisible()
})
@@ -231,13 +237,10 @@ test.describe('Missing models in Error Tab', () => {
'missing/model_metadata_widget_mismatch'
)
- const missingModelsTitle = comfyPage.page.getByText(/Missing Models/)
- await expect(missingModelsTitle).not.toBeVisible()
-
- const errorOverlay = comfyPage.page.getByTestId(
- TestIds.dialogs.errorOverlay
- )
- await expect(errorOverlay).not.toBeVisible()
+ await expect(
+ comfyPage.page.getByTestId(TestIds.dialogs.errorOverlay)
+ ).not.toBeVisible()
+ await expect(comfyPage.page.getByText(/Missing Models/)).not.toBeVisible()
})
// Flaky test after parallelization
diff --git a/browser_tests/tests/vueNodes/widgets/load/uploadWidgets.spec.ts b/browser_tests/tests/vueNodes/widgets/load/uploadWidgets.spec.ts
index 077e56a4aa1..0998c3eacb1 100644
--- a/browser_tests/tests/vueNodes/widgets/load/uploadWidgets.spec.ts
+++ b/browser_tests/tests/vueNodes/widgets/load/uploadWidgets.spec.ts
@@ -2,6 +2,7 @@ import {
comfyExpect as expect,
comfyPageFixture as test
} from '../../../../fixtures/ComfyPage'
+import { TestIds } from '../../../../fixtures/selectors'
test.describe('Vue Upload Widgets', () => {
test.beforeEach(async ({ comfyPage }) => {
@@ -19,10 +20,14 @@ test.describe('Vue Upload Widgets', () => {
).not.toBeVisible()
await expect
- .poll(() => comfyPage.page.getByText('Error loading image').count())
+ .poll(() =>
+ comfyPage.page.getByTestId(TestIds.errors.imageLoadError).count()
+ )
.toBeGreaterThan(0)
await expect
- .poll(() => comfyPage.page.getByText('Error loading video').count())
+ .poll(() =>
+ comfyPage.page.getByTestId(TestIds.errors.videoLoadError).count()
+ )
.toBeGreaterThan(0)
})
})
diff --git a/src/components/dialog/content/error/FindIssueButton.vue b/src/components/dialog/content/error/FindIssueButton.vue
index 767202251f5..7ec89ebc86a 100644
--- a/src/components/dialog/content/error/FindIssueButton.vue
+++ b/src/components/dialog/content/error/FindIssueButton.vue
@@ -19,10 +19,7 @@ const props = defineProps<{
const queryString = computed(() => props.errorMessage + ' is:issue')
-/**
- * Open GitHub issues search and track telemetry.
- */
-const openGitHubIssues = () => {
+function openGitHubIssues() {
useTelemetry()?.trackUiButtonClicked({
button_id: 'error_dialog_find_existing_issues_clicked'
})
diff --git a/src/components/error/ErrorOverlay.vue b/src/components/error/ErrorOverlay.vue
index be599a39958..f5d74c2285a 100644
--- a/src/components/error/ErrorOverlay.vue
+++ b/src/components/error/ErrorOverlay.vue
@@ -49,7 +49,12 @@
-