Spaces:
Sleeping
Sleeping
| const { chromium } = require('playwright'); | |
| (async () => { | |
| const browser = await chromium.launch({ headless: true }); | |
| const ctx = await browser.newContext({ | |
| viewport: { width: 1440, height: 900 }, | |
| deviceScaleFactor: 2, | |
| colorScheme: 'dark', | |
| }); | |
| const page = await ctx.newPage(); | |
| const dir = 'docs'; | |
| await page.goto('http://localhost:3901', { waitUntil: 'networkidle', timeout: 15000 }); | |
| await page.waitForTimeout(2000); | |
| // Helper: click a sidebar icon by index (0-based, top to bottom) | |
| async function clickSidebarIcon(index) { | |
| const icons = page.locator('nav button, nav a, aside button, aside a, [class*="sidebar"] button, [class*="sidebar"] a, [class*="Sidebar"] button'); | |
| const count = await icons.count(); | |
| if (index < count) { | |
| await icons.nth(index).click(); | |
| await page.waitForTimeout(1500); | |
| } | |
| } | |
| // 1. Gallery / Voice Library β click the icon that looks like a folder/library | |
| // Try to find gallery-related navigation | |
| try { | |
| // Look for gallery/library nav item | |
| const galleryBtn = page.locator('button:has-text("Gallery"), a:has-text("Gallery"), [data-tab="gallery"], [title*="allery"], [title*="ibrary"]').first(); | |
| if (await galleryBtn.isVisible({ timeout: 1000 })) { | |
| await galleryBtn.click(); | |
| await page.waitForTimeout(2000); | |
| await page.screenshot({ path: `${dir}/screenshot-gallery.png`, fullPage: false }); | |
| console.log('β screenshot-gallery.png'); | |
| } | |
| } catch(e) { console.log('Gallery not found via text, trying sidebar icons'); } | |
| // 2. Settings page | |
| try { | |
| const settingsBtn = page.locator('button:has-text("Settings"), a:has-text("Settings"), [data-tab="settings"], [title*="etting"]').first(); | |
| if (await settingsBtn.isVisible({ timeout: 1000 })) { | |
| await settingsBtn.click(); | |
| await page.waitForTimeout(2000); | |
| await page.screenshot({ path: `${dir}/screenshot-settings.png`, fullPage: false }); | |
| console.log('β screenshot-settings.png'); | |
| } | |
| } catch(e) { console.log('Settings not found via text'); } | |
| // 3. Try clicking each sidebar icon to discover hidden views | |
| // The sidebar icons are the vertical strip on the left | |
| const sideIcons = page.locator('aside > div > button, aside > button, nav[class*="side"] button, [class*="sidebar"] > button, [class*="Sidebar"] > button'); | |
| const iconCount = await sideIcons.count(); | |
| console.log(`Found ${iconCount} sidebar icons`); | |
| // Click each icon and screenshot if it reveals a new view | |
| const captured = new Set(); | |
| for (let i = 0; i < Math.min(iconCount, 10); i++) { | |
| try { | |
| await sideIcons.nth(i).click(); | |
| await page.waitForTimeout(1500); | |
| // Get the page title/header to name the screenshot | |
| const header = await page.locator('h1, h2, [class*="title"], [class*="header"] span').first().textContent().catch(() => ''); | |
| const name = (header || `view-${i}`).toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 30); | |
| if (!captured.has(name)) { | |
| captured.add(name); | |
| await page.screenshot({ path: `${dir}/screenshot-${name}.png`, fullPage: false }); | |
| console.log(`β screenshot-${name}.png (icon ${i})`); | |
| } | |
| } catch(e) {} | |
| } | |
| // 4. Also try bottom-bar items (LOGS, Backend, Frontend, Tauri) | |
| try { | |
| const logsBtn = page.locator('button:has-text("LOGS"), [class*="log"] button').first(); | |
| if (await logsBtn.isVisible({ timeout: 1000 })) { | |
| await logsBtn.click(); | |
| await page.waitForTimeout(1500); | |
| // Expand log panel if collapsed | |
| await page.screenshot({ path: `${dir}/screenshot-logs.png`, fullPage: false }); | |
| console.log('β screenshot-logs.png'); | |
| } | |
| } catch(e) {} | |
| // 5. A/B Compare button | |
| try { | |
| // First go to launchpad | |
| await page.goto('http://localhost:3901', { waitUntil: 'networkidle', timeout: 10000 }); | |
| await page.waitForTimeout(1500); | |
| const abBtn = page.locator('button:has-text("A/B"), button:has-text("Compare")').first(); | |
| if (await abBtn.isVisible({ timeout: 1000 })) { | |
| await abBtn.click(); | |
| await page.waitForTimeout(2000); | |
| await page.screenshot({ path: `${dir}/screenshot-ab-compare.png`, fullPage: false }); | |
| console.log('β screenshot-ab-compare.png'); | |
| } | |
| } catch(e) { console.log('A/B Compare not found'); } | |
| await browser.close(); | |
| console.log('All done!'); | |
| })(); | |