mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-05-24 06:35:10 +00:00
When an app mode workflow is opened on fresh page load, either from a template url, or a persisted in browser cache, the UI would briefly display the graph view prior to swapping to app mode. This is fixed by continuing to display the splash screen until workflow state has loaded. Share by url brings unique difficulties. The function call does not return until a user has responded to a dialogue. If the splash screen were blocked by this, the user would never be able to see the dialogue. Consequentially, this change is not applied to shared workflow urls and the (very unlikely) url including both a template url and a share url will now prioritize the template url. A best effort e2e test is included, but is a little clunky. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-12387-Persist-splash-until-graph-load-completes-3666d73d3650813495e4ccad6052c1e4) by [Unito](https://www.unito.io)
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import {
|
|
ComfyPage,
|
|
comfyPageFixture as test,
|
|
comfyExpect as expect
|
|
} from '@e2e/fixtures/ComfyPage'
|
|
|
|
test.describe('Linear Mode', { tag: '@ui' }, () => {
|
|
test('Displays linear controls when app mode active', async ({
|
|
comfyPage
|
|
}) => {
|
|
await comfyPage.appMode.enterAppModeWithInputs([])
|
|
|
|
await expect(comfyPage.page.getByTestId('linear-widgets')).toBeVisible()
|
|
})
|
|
|
|
test('Run button visible in linear mode', async ({ comfyPage }) => {
|
|
await comfyPage.appMode.enterAppModeWithInputs([])
|
|
|
|
await expect(comfyPage.page.getByTestId('linear-run-button')).toBeVisible()
|
|
})
|
|
|
|
test('Workflow info section visible', async ({ comfyPage }) => {
|
|
await comfyPage.appMode.enterAppModeWithInputs([])
|
|
|
|
await expect(
|
|
comfyPage.page.getByTestId('linear-workflow-info')
|
|
).toBeVisible()
|
|
})
|
|
|
|
test('Returns to graph mode', async ({ comfyPage }) => {
|
|
await comfyPage.appMode.enterAppModeWithInputs([])
|
|
|
|
await expect(comfyPage.page.getByTestId('linear-widgets')).toBeVisible()
|
|
|
|
await comfyPage.appMode.toggleAppMode()
|
|
|
|
await expect(comfyPage.canvas).toBeVisible()
|
|
await expect(comfyPage.page.getByTestId('linear-widgets')).toBeHidden()
|
|
})
|
|
|
|
test('Canvas not visible in app mode', async ({ comfyPage }) => {
|
|
await comfyPage.appMode.enterAppModeWithInputs([])
|
|
|
|
await expect(comfyPage.page.getByTestId('linear-widgets')).toBeVisible()
|
|
await expect(comfyPage.canvas).toBeHidden()
|
|
})
|
|
|
|
test('Spinner persists until workflow loaded', async ({
|
|
page,
|
|
request
|
|
}, testInfo) => {
|
|
const comfyPage = new ComfyPage(page, request)
|
|
const { parallelIndex } = testInfo
|
|
const username = `playwright-test-${parallelIndex}`
|
|
const userId = await comfyPage.setupUser(username)
|
|
comfyPage.userIds[parallelIndex] = userId
|
|
|
|
await page.goto(`${comfyPage.url}/api/users`)
|
|
await page.evaluate((id) => {
|
|
localStorage.clear()
|
|
sessionStorage.clear()
|
|
localStorage.setItem('Comfy.userId', id)
|
|
}, comfyPage.id)
|
|
|
|
const splash = page.locator('#splash-loader')
|
|
|
|
let notifyWorkflowRequested!: () => void
|
|
const workflowRequested = new Promise<void>(
|
|
(r) => (notifyWorkflowRequested = r)
|
|
)
|
|
let unblockRequest!: () => void
|
|
const requestUnblocked = new Promise<void>((r) => (unblockRequest = r))
|
|
|
|
await page.route('**/templates/default.json', async (route) => {
|
|
notifyWorkflowRequested()
|
|
await requestUnblocked
|
|
return route.continue()
|
|
})
|
|
|
|
await comfyPage.goto({ url: `${comfyPage.url}/?template=default` })
|
|
await workflowRequested
|
|
|
|
await comfyPage.nextFrame()
|
|
await expect(splash).toBeVisible()
|
|
unblockRequest()
|
|
await expect(splash).toBeHidden()
|
|
})
|
|
})
|