mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-19 22:09:37 +00:00
## Summary Add 2 reusable test helpers for Playwright E2E tests, integrated into the ComfyPage fixture. These provide standardized patterns for mocking feature flags and queue state across all E2E tests. ## Changes - **`FeatureFlagHelper.ts`** — manage localStorage `ff:` prefixed feature flags (`seedFlags` for init-time, `setFlags` for runtime) and mock `/api/features` route - **`QueueHelper.ts`** — mock `/api/queue` and `/api/history` routes with configurable running/pending counts and success/error job entries - **`ComfyPage.ts`** — integrate both helpers as `comfyPage.featureFlags` and `comfyPage.queue` ## Review Focus - Helper API design: are `seedFlags`/`setFlags`/`mockServerFeatures` the right abstractions for feature flag testing? - Queue mock fidelity: does the mock history shape match real ComfyUI API responses closely enough? - These are test-only infrastructure — no production code changes. ## Stack This is the base PR for the Playwright E2E coverage stack. Waves 1-4 all branch from this and can merge independently once this lands: - **→ This PR**: Test infrastructure helpers - #9555: Toasts, error overlay, selection toolbox, linear mode, selection rectangle - #9556: Node search, bottom panel, focus mode, job history, side panel - #9557: Errors tab, node headers, queue notifications, settings sidebar - #9558: Minimap, widget copy, floating menus, node library essentials --------- Co-authored-by: GitHub Action <action@github.com>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import {
|
|
comfyExpect as expect,
|
|
comfyPageFixture as test
|
|
} from '../fixtures/ComfyPage'
|
|
|
|
test.describe('Widget copy button', { tag: '@ui' }, () => {
|
|
test.beforeEach(async ({ comfyPage }) => {
|
|
await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Top')
|
|
await comfyPage.settings.setSetting('Comfy.VueNodes.Enabled', true)
|
|
await comfyPage.setup()
|
|
|
|
// Add a PreviewAny node which has a read-only textarea with a copy button
|
|
await comfyPage.page.evaluate(() => {
|
|
const node = window.LiteGraph!.createNode('PreviewAny')
|
|
window.app!.graph.add(node)
|
|
})
|
|
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
})
|
|
|
|
test('Copy button has correct aria-label', async ({ comfyPage }) => {
|
|
const copyButton = comfyPage.page
|
|
.locator('[data-node-id] button[aria-label]')
|
|
.filter({ has: comfyPage.page.locator('.icon-\\[lucide--copy\\]') })
|
|
.first()
|
|
await expect(copyButton).toBeAttached()
|
|
await expect(copyButton).toHaveAttribute('aria-label', /copy/i)
|
|
})
|
|
|
|
test('Copy button exists within textarea widget group container', async ({
|
|
comfyPage
|
|
}) => {
|
|
const container = comfyPage.page
|
|
.locator('[data-node-id] div.group:has(textarea[readonly])')
|
|
.first()
|
|
await expect(container).toBeVisible()
|
|
await container.hover()
|
|
await comfyPage.nextFrame()
|
|
|
|
const copyButton = container.locator('button').filter({
|
|
has: comfyPage.page.locator('.icon-\\[lucide--copy\\]')
|
|
})
|
|
await expect(copyButton.first()).toBeAttached()
|
|
})
|
|
})
|