mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-05-24 14:45:36 +00:00
## Summary - Add `browser_tests/tests/bottomPanel.spec.ts` with tests for behaviors not covered by existing `bottomPanelLogs` and `bottomPanelShortcuts` specs - Tests cover: close button (X), tab persistence on re-open, resize gutter visibility and drag, canvas interaction when panel is closed, cross-panel switching (terminal <-> shortcuts), and registered tab enumeration - Extend `BottomPanel` fixture with `closeButton` and `resizeGutter` locators ## Test plan - [ ] `pnpm test:browser:local` passes all new tests in `bottomPanel.spec.ts` - [ ] Existing `bottomPanelLogs.spec.ts` and `bottomPanelShortcuts.spec.ts` are unaffected - [ ] `pnpm typecheck:browser` passes - [ ] `pnpm lint` passes ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10814-test-add-E2E-tests-for-bottom-panel-core-behaviors-3366d73d365081ea9b90c643897845fa) by [Unito](https://www.unito.io) --------- Co-authored-by: dante <dante@danteui-MacStudio.local> Co-authored-by: GitHub Action <action@github.com> Co-authored-by: Alexander Brown <drjkl@comfy.org>
60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import type { Locator, Page } from '@playwright/test'
|
|
|
|
class ShortcutsTab {
|
|
readonly essentialsTab: Locator
|
|
readonly viewControlsTab: Locator
|
|
readonly manageButton: Locator
|
|
readonly keyBadges: Locator
|
|
readonly subcategoryTitles: Locator
|
|
|
|
constructor(readonly page: Page) {
|
|
this.essentialsTab = page.getByRole('tab', { name: /Essential/i })
|
|
this.viewControlsTab = page.getByRole('tab', { name: /View Controls/i })
|
|
this.manageButton = page.getByRole('button', { name: /Manage Shortcuts/i })
|
|
this.keyBadges = page.locator('.key-badge')
|
|
this.subcategoryTitles = page.locator('.subcategory-title')
|
|
}
|
|
}
|
|
|
|
export class BottomPanel {
|
|
readonly root: Locator
|
|
readonly keyboardShortcutsButton: Locator
|
|
readonly toggleButton: Locator
|
|
readonly closeButton: Locator
|
|
readonly resizeGutter: Locator
|
|
readonly shortcuts: ShortcutsTab
|
|
|
|
constructor(readonly page: Page) {
|
|
this.root = page.locator('.bottom-panel')
|
|
this.keyboardShortcutsButton = page.getByRole('button', {
|
|
name: /Keyboard Shortcuts/i
|
|
})
|
|
this.toggleButton = page.getByRole('button', {
|
|
name: /Toggle Bottom Panel/i
|
|
})
|
|
this.closeButton = this.root.getByRole('button', { name: /^Close$/i })
|
|
// PrimeVue renders the splitter gutter outside the panel body.
|
|
this.resizeGutter = page.locator(
|
|
'.splitter-overlay-bottom > .p-splitter-gutter'
|
|
)
|
|
this.shortcuts = new ShortcutsTab(page)
|
|
}
|
|
|
|
async resizeByDragging(deltaY: number): Promise<void> {
|
|
const gutterBox = await this.resizeGutter.boundingBox()
|
|
if (!gutterBox) {
|
|
throw new Error('Bottom panel resize gutter should have layout')
|
|
}
|
|
|
|
const gutterCenterX = gutterBox.x + gutterBox.width / 2
|
|
const gutterCenterY = gutterBox.y + gutterBox.height / 2
|
|
|
|
await this.page.mouse.move(gutterCenterX, gutterCenterY)
|
|
await this.page.mouse.down()
|
|
await this.page.mouse.move(gutterCenterX, gutterCenterY + deltaY, {
|
|
steps: 5
|
|
})
|
|
await this.page.mouse.up()
|
|
}
|
|
}
|