Skip to content
Agentmart
Submit a tool

CDPWave Testing

Write browser automation tests with cdpwave at the CDP level.

Skill by MathiasPaulenko

IndexedMIT★ 2
Write a review

Chalk Labs

Need help deploying CDPWave Testing?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/mathiaspaulenko-cdpwave-testing

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Write browser automation tests with cdpwave at the CDP level. Async test patterns, multi-tab sessions, event handling, screenshots in CI, escape hatch for uncovered CDP methods.

Use cases: testing, devops, writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/cdpwave-testing

What's inside

Skill name
CDPWave Testing
Description
Write browser automation tests with cdpwave at the CDP level. Async test patterns, multi-tab sessions, event handling, screenshots in CI, escape hatch for uncovered CDP methods.
License
MIT
Instructions
534 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts
  • Instructions call the network

Agent Skills spec issues

  • name: only lowercase letters, digits and single hyphens allowed
  • name: "CDPWave Testing" does not match folder "cdpwave-testing"
  • body: 534 lines (spec recommends under 500)

Files (8)

  • SKILL.md
  • conftest.py · assets/templates/
  • test_events.py · assets/templates/
  • test_multi_tab.py · assets/templates/
  • test_screenshot.py · assets/templates/
  • async-patterns.md · references/
  • cdp-domains.md · references/
  • migration-pyppeteer.md · references/

SKILL.md (first lines)

# CDPWave Testing

## Description

cdpwave is a low-level Chrome DevTools Protocol (CDP) client for Python. It talks directly to Chrome's WebSocket endpoint — no Node.js, no ChromeDriver, no Selenium, no Playwright. Just pure async Python with full type hints. It is the CDP backend that powers wavexis and wavexis-mcp.

This skill covers writing browser automation tests with cdpwave at the CDP level, including async test patterns, multi-tab sessions, event handling, screenshots in CI, and the escape hatch for uncovered CDP methods.

## When to Invoke

- Writing CDP-level browser tests in Python
- Needing direct Chrome DevTools Protocol access without abstractions
- Migrating from pyppeteer or pychrome to cdpwave
- Setting up pytest-asyncio fixtures for CDP testing
- Needing multi-tab session management in tests
- Handling CDP events in async test flows
- Using the escape hatch for CDP methods without typed wrappers

## Prerequisites

- Python 3.11+
- A Chromium-based browser (Chrome, Edge, Brave, or Chromium) installed
- `pip install cdpwave`
- `pip install pytest pytest-asyncio` (for testing)

## CDPClient Setup

### Launch a new browser

```python
import asyncio
from cdpwave import CDPClient

async def main() -> None:
    async with await CDPClient.launch(headless=True) as client:
        session = await client.new_page("https://example.com")
        result = await session.runtime.evaluate("document.title", return_by_value=True)
        print(result["result"]["value"])
        await session.close()

asyncio.run(main())
```

### Connect to an existing browser

```python
from cdpwave import CDPClient

async with await CDPClient.connect(host="localhost", port=9222) as client:
    session = await client.new_page("https://example.com")
```

### Connect via direct WebSocket URL

```python
from cdpwave import CDPClient

async with await CDPClient.connect(ws_url="ws://localhost:9222/devtools/page/123") as client:
    session = await client.new_page("https://example.com")
```

### Launch options

```python
client = await CDPClient.launch(
    headless=False,
    browser_path="/usr/bin/google-chrome",
    extra_args=["--disable-gpu", "--no-sandbox"],
    keepalive_interval=30,
    keepalive_timeout=10,
)
```

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `headless` | `bool` | `True` | Run browser without UI |
| `browser_path` | `str \| None` | Auto-detect | Path to browser executable |
| `extra_args` | `list[str]` | `[]` | Extra Chrome flags |
| `keepalive_interval` | `int` | `30` | WebSocket ping interval (seconds) |
| `keepalive_timeout` | `int` | `10` | WebSocket pong timeout (seconds) |

## Session Management

### Create and close sessions

```python
async with await CDPClient.launch() as client:
    session = await client.new_page("https://example.com")
    # Work with session...
    await session.close()
```

### Multi-tab sessions

```python
async with await CDPClient.launch() as client:
    tab1 = await client.new_page("https://example.com")
    tab2 = await client.new_page("https://example.org")

    title1 = await tab1.runtime.evaluate("document.title", return_by_value=True)
    title2 = await tab2.runtime.evaluate("document.title", return_by_value=True)

    print(title1["result"]["value"])  # "Example Domain"
    print(title2["result"]["value"])  # "IANA-managed domains"

    # Track all active sessions
    for sid, session in client.sessions.items():
        print(f"Session {sid}: {await session.runtime.evaluate('location.href', return_by_value=True)}")
```

### Session lifecycle

```python
session = await client.new_page("https://example.com")

# Navigate
await session.page.navigate("https://example.org")

# Reload

From MathiasPaulenko/ai-toolkit, MIT.

More from MathiasPaulenko/ai-toolkit

Signals

Stars
2
Forks
0
Open issues
0
Last commit (this folder)
Jul 30, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from MathiasPaulenko

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get CDPWave Testing running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying CDPWave Testing?

CallGet help
Cite this page

CDPWave Testing skill. Agent Mart. https://agentmart.dev/skills/mathiaspaulenko-cdpwave-testing (last updated 2026-10-24)