CDPWave Testing
Write browser automation tests with cdpwave at the CDP level.
Skill by MathiasPaulenko
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.
About
Use cases: testing, devops, writing
Reviews
Write a reviewNo 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")
# ReloadFrom MathiasPaulenko/ai-toolkit, MIT.
More from MathiasPaulenko/ai-toolkit
- 0.583score
BiDiWave Cross-Browser
MathiasPaulenko
Cross-browser testing with bidiwave using the W3C WebDriver BiDi protocol.
SkillAFreshness: A★ 2Claude Code +9 - 0.581score
Skill Name
MathiasPaulenko
What this skill does and when to use it
SkillAFreshness: A★ 2Claude Code +9 - 0.559score
google-crawling-indexing
MathiasPaulenko
Practical guide to Google crawling and indexing: sitemaps, robots.txt, meta tags, canonical URLs, redirects, JavaScript, removals, and crawler management.
SkillBFreshness: B★ 2Claude Code +9 - 0.550score
google-ranking-appearance
MathiasPaulenko
Practical guide to Google search ranking and appearance: title links, snippets, structured data, rich results, images, videos, Discover, and local features.
SkillBFreshness: B★ 2Claude Code +9 - 0.550score
google-seo-fundamentals
MathiasPaulenko
Practical guide to Google Search SEO fundamentals: Search Essentials, technical requirements, spam policies, helpful content, generative AI guidelines, and…
SkillBFreshness: B★ 2Claude Code +9 - 0.550score
google-seo-monitoring
MathiasPaulenko
Practical guide to Google SEO monitoring and debugging: Search Console, Google Analytics, Google Trends, search operators, traffic drops, security, spam, and…
SkillBFreshness: B★ 2Claude Code +9 - 0.542score
CDPWave Debugging
MathiasPaulenko
Advanced debugging with cdpwave.
SkillBFreshness: B★ 2Claude Code +9 - 0.542score
BiDiWave Network Interception
MathiasPaulenko
Network interception with bidiwave.
SkillBFreshness: B★ 2Claude Code +9 - 0.504score
ebook-writer
MathiasPaulenko
Comprehensive ebook creation skill covering outlining, chapter writing, editing, formatting, and marketing.
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
appian-lowcode
MathiasPaulenko
Appian low-code platform development guide.
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
appium-mobile
MathiasPaulenko
Mobile automation with Appium: iOS and Android, gestures, device farms (BrowserStack, Sauce Labs), parallel execution, and CI/CD.
SkillCFreshness: C★ 2Claude Code +9 - 0.504score
db2-oracle
MathiasPaulenko
Enterprise database development for IBM DB2 and Oracle.
SkillCFreshness: C★ 2Claude Code +9
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
- Repository
- github.com/MathiasPaulenko/ai-toolkit
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from MathiasPaulenko
- 0.629score
WaveXisMCP
MathiasPaulenko
220 browser automation tools for Chrome, Edge, and Firefox via CDP + BiDi.
ConnectorAFreshness: ALocal★ 3↓ 92/wkClaude Code +5 - 0.583score
BiDiWave Cross-Browser
MathiasPaulenko
Cross-browser testing with bidiwave using the W3C WebDriver BiDi protocol.
SkillAFreshness: A★ 2Claude Code +9 - 0.581score
Skill Name
MathiasPaulenko
What this skill does and when to use it
SkillAFreshness: A★ 2Claude Code +9 - 0.559score
google-crawling-indexing
MathiasPaulenko
Practical guide to Google crawling and indexing: sitemaps, robots.txt, meta tags, canonical URLs, redirects, JavaScript, removals, and crawler management.
SkillBFreshness: B★ 2Claude Code +9 - 0.550score
google-ranking-appearance
MathiasPaulenko
Practical guide to Google search ranking and appearance: title links, snippets, structured data, rich results, images, videos, Discover, and local features.
SkillBFreshness: B★ 2Claude Code +9 - 0.550score
google-seo-fundamentals
MathiasPaulenko
Practical guide to Google Search SEO fundamentals: Search Essentials, technical requirements, spam policies, helpful content, generative AI guidelines, and…
SkillBFreshness: B★ 2Claude Code +9
Cite this page
CDPWave Testing skill. Agent Mart. https://agentmart.dev/skills/mathiaspaulenko-cdpwave-testing (last updated 2026-10-24)