Skip to content
cccskills
FreePublished on GitHub

playwright-demo:debug

Debug failing Playwright demo steps - selectors, auth, timing, and alignment issues

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303 stars(GitHub 303 + cccskills 0)
Works withPlaywright

Run score Not tested

See how to install

Files included (1)

  • SKILL.md3.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Debug Playwright Demo Issues

Troubleshoot and fix failing steps in Playwright demo walkthrough tests.

When to Use

  • A demo recording step fails (selector not found, auth error, timeout)
  • Narration-video alignment validation fails
  • Video shows wrong content during narration
  • Multiple voices overlapping in output

Debugging Workflow

  1. Check the test output for [demo] log lines — identify which step failed
  2. Look at screenshots in local_experiments/test-results/<test-dir>/test-failed-1.png
  3. Run validation to check structural issues:
python3 local_experiments/validate-alignment.py

Common Issues

Selector not found

Symptom: element not visible or timeout waiting for selector

Screenshot the page to see actual DOM:

cd rossoctl/ui-v2 && NODE_PATH=node_modules node -e "
const { chromium } = require('@playwright/test');
(async () => {
  const b = await chromium.launch();
  const p = await b.newPage({ ignoreHTTPSErrors: true });
  await p.goto('TARGET_URL', { waitUntil: 'networkidle', timeout: 30000 });
  await p.screenshot({ path: '/tmp/rossoctl/debug.png', fullPage: true });
  const els = await p.evaluate(() =>
    Array.from(document.querySelectorAll('a, button, [role=tab]')).map(e => ({
      tag: e.tagName, text: e.textContent?.trim()?.substring(0, 50), href: e.href
    }))
  );
  console.log(JSON.stringify(els, null, 2));
  await b.close();
})();
"

Missing markStep timestamp

Symptom: Validation shows Section [name] has no markStep() timestamp

Fix: The markStep() call is inside a conditional block that didn't execute. Move it outside:

// WRONG - inside conditional
if (await element.isVisible()) {
  markStep('section_name');
  await element.click();
}

// RIGHT - outside conditional
markStep('section_name');
if (await element.isVisible()) {
  await element.click();
}

Keycloak auth lost on SPA navigation

Symptom: Page redirects to Keycloak after clicking sidebar link

Fix: Use SPA sidebar clicks (client-side routing), not page.goto():

// WRONG - full reload loses Keycloak tokens
await page.goto(`${UI_URL}/agents`);

// RIGHT - SPA navigation preserves tokens
const link = page.locator('nav a').filter({ hasText: /^Agents$/ });
await demoClick(link.first(), 'Agents sidebar');

MLflow OIDC login

Symptom: MLflow shows login page or "User not allowed"

MLflow uses 2-stage auth:

  1. MLflow's own OIDC page at /oidc/ui/auth — click SSO button
  2. Keycloak login (may auto-login if session exists)

After login, navigate to ${MLFLOW_URL}/#/experiments (hash routing).

Kiali OAuth

Symptom: OpenShift login page shown

Kiali uses OpenShift OAuth — needs kubeadmin credentials (separate from Keycloak). Script auto-discovers from <kubeconfig-dir>/kubeadmin-password.

Overlapping audio

Symptom: Multiple voices playing simultaneously

Cause: Missing timestamps → audio segments placed at wrong positions

Fix: Ensure ALL markStep() calls fire unconditionally. Run validation:

python3 local_experiments/validate-alignment.py

Check for NO TIMESTAMP errors. Fix those first.

Task Tracking

On invocation:

  1. TaskCreate: playwright-demos | <cluster> | ad-hoc | debug | | <issue description>
  2. TaskUpdate when issue is resolved

Related Skills

  • playwright-demo — Main demo recording workflow
  • rossoctl:ui-debug — Debug Rossoctl UI issues
  • k8s:health — Check platform health

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

auth

Free

Authentication and authorization patterns for Rossoctl services

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Create confidential OAuth2 clients in Keycloak for server-to-service authentication

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Configure MLflow with mlflow-oidc-auth plugin for Keycloak OIDC authentication

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Configure OpenTelemetry Collector with OAuth2 authentication for trace export

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

ci

Free

CI pipeline monitoring, status checks, and PR validation workflows

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

Monitor running CI jobs, wait for completion, create tasks for results

The English summary is being prepared. Showing the original description.

rossoctl/rossoctl303Updated Oct 25, 2026

See all skills by rossoctl

Report a problem with this skill