#!/usr/bin/env node /** * Example: Test Format Selector Component * * This example demonstrates how to use Puppeteer to test an interactive * component on the documentation site. * * Run with: node scripts/puppeteer/examples/test-format-selector.js */ import { launchBrowser, navigateToPage, takeScreenshot, elementExists, waitForElement, clickAndNavigate, debugPage, } from '../utils/puppeteer-helpers.js'; async function testFormatSelector() { console.log('\n๐Ÿงช Testing Format Selector Component\n'); let browser; try { // Launch browser console.log('Launching browser...'); browser = await launchBrowser({ headless: true }); // Navigate to a page with format selector console.log('Navigating to page...'); const page = await navigateToPage(browser, '/influxdb3/core/get-started/'); // Check if format selector exists console.log('\n1. Checking if format selector exists...'); const hasFormatSelector = await elementExists( page, '[data-component="format-selector"]' ); if (!hasFormatSelector) { console.log(' โš ๏ธ Format selector not found on this page'); console.log( " This is expected if the page doesn't have multiple formats" ); return; } console.log(' โœ“ Format selector found'); // Take initial screenshot console.log('\n2. Capturing initial state...'); await takeScreenshot(page, 'format-selector-initial.png', { selector: '[data-component="format-selector"]', }); console.log(' โœ“ Screenshot saved'); // Click the format selector button console.log('\n3. Testing dropdown interaction...'); const buttonExists = await elementExists( page, '[data-component="format-selector"] button' ); if (buttonExists) { // Click button to open dropdown await page.click('[data-component="format-selector"] button'); console.log(' โœ“ Clicked format selector button'); // Wait for dropdown menu to appear await waitForElement( page, '[data-component="format-selector"] [role="menu"]', 3000 ); console.log(' โœ“ Dropdown menu appeared'); // Take screenshot of open dropdown await takeScreenshot(page, 'format-selector-open.png', { selector: '[data-component="format-selector"]', }); console.log(' โœ“ Screenshot of open dropdown saved'); // Get all format options const options = await page.$$eval( '[data-component="format-selector"] [role="menuitem"]', (items) => items.map((item) => item.textContent.trim()) ); console.log(` โœ“ Found ${options.length} format options:`, options); // Test clicking each option console.log('\n4. Testing format options...'); const menuItems = await page.$$( '[data-component="format-selector"] [role="menuitem"]' ); for (let i = 0; i < Math.min(menuItems.length, 3); i++) { const option = options[i]; console.log(` Testing option: ${option}`); // Click the format selector button again (it closes after selection) await page.click('[data-component="format-selector"] button'); await page.waitForTimeout(300); // Wait for animation // Click the option await page.click( `[data-component="format-selector"] [role="menuitem"]:nth-child(${i + 1})` ); await page.waitForTimeout(500); // Wait for content to update // Take screenshot of result await takeScreenshot( page, `format-selector-${option.toLowerCase().replace(/\s+/g, '-')}.png` ); console.log(` โœ“ Tested ${option} format`); } } // Check for JavaScript errors console.log('\n5. Checking for JavaScript errors...'); const errors = await page.evaluate(() => { // Check if any errors were logged return window.__errors || []; }); if (errors.length > 0) { console.log(' โš ๏ธ Found JavaScript errors:'); errors.forEach((err) => console.log(` - ${err}`)); } else { console.log(' โœ“ No JavaScript errors detected'); } // Get computed styles console.log('\n6. Checking component styles...'); const styles = await page.evaluate(() => { const selector = document.querySelector( '[data-component="format-selector"]' ); if (!selector) return null; const computed = window.getComputedStyle(selector); return { display: computed.display, visibility: computed.visibility, opacity: computed.opacity, }; }); if (styles) { console.log(' Component styles:', styles); console.log(' โœ“ Component is visible'); } console.log('\nโœ… Format selector tests completed successfully!\n'); } catch (error) { console.error('\nโŒ Test failed:', error.message); // Save debug output if (browser) { const pages = await browser.pages(); if (pages.length > 0) { await debugPage(pages[0], 'format-selector-error'); console.log('\n๐Ÿ’พ Debug information saved to debug-output/'); } } throw error; } finally { if (browser) { await browser.close(); } } } // Run the test testFormatSelector().catch((error) => { console.error('\nFatal error:', error); process.exit(1); });