diff --git a/docs/gateway/images/control-ui-analytics.png b/docs/gateway/images/control-ui-analytics.png deleted file mode 100644 index 220e603bc..000000000 Binary files a/docs/gateway/images/control-ui-analytics.png and /dev/null differ diff --git a/docs/images/control-ui-analytics.png b/docs/images/control-ui-analytics.png index 3026f2b67..4bced2664 100644 Binary files a/docs/images/control-ui-analytics.png and b/docs/images/control-ui-analytics.png differ diff --git a/docs/web/control-ui.md b/docs/web/control-ui.md index c563161a1..9f399b24a 100644 --- a/docs/web/control-ui.md +++ b/docs/web/control-ui.md @@ -50,7 +50,7 @@ The onboarding wizard generates a gateway token by default, so paste it here on The Analytics tab provides visibility into your token usage and costs: -![Analytics Dashboard](/gateway/images/control-ui-analytics.png) +![Analytics Dashboard](/images/control-ui-analytics.png) ### Plan Quota diff --git a/ui/src/ui/analytics-screenshot.e2e.mjs b/ui/src/ui/analytics-screenshot.e2e.mjs index c5f5dfa2d..303fd2708 100644 --- a/ui/src/ui/analytics-screenshot.e2e.mjs +++ b/ui/src/ui/analytics-screenshot.e2e.mjs @@ -67,14 +67,36 @@ async function takeScreenshot() { localStorage.setItem('clawdbot-control-ui-settings', JSON.stringify(settings)); }, TOKEN); - // Navigate to analytics - await page.goto(`${BASE_URL}/analytics`); - await page.waitForTimeout(4000); + // Reload to apply token + await page.reload(); + await page.waitForTimeout(3000); - // Click refresh + // Click on Analytics in the sidebar - use text content matching + try { + // Wait for sidebar to be visible + await page.waitForSelector('nav', { timeout: 5000 }); + // Click on the Analytics link using text + await page.click('text=Analytics', { timeout: 5000 }); + console.log('Clicked Analytics link'); + await page.waitForTimeout(4000); + } catch (e) { + console.log('Could not click Analytics via text:', e.message); + // Try href-based selector + try { + await page.click('a[href="/analytics"]', { timeout: 3000 }); + console.log('Clicked Analytics via href'); + await page.waitForTimeout(4000); + } catch (e2) { + console.log('Fallback to direct navigation'); + await page.goto(`${BASE_URL}/analytics`); + await page.waitForTimeout(4000); + } + } + + // Click refresh to load data const refreshButton = page.locator('button', { hasText: 'Refresh' }); try { - await refreshButton.click(); + await refreshButton.click({ timeout: 5000 }); console.log('Clicked refresh'); await page.waitForTimeout(3000); } catch (e) {