// DOCUMENTATION

Playwright migration

API mapping from Playwright to Koko SDK and known gaps.

SDK Reference

The Koko SDK public API is modeled after Playwright. Most scripts change only the import and connection line.

Connection

PlaywrightKoko SDK
chromium.connectOverCDP(url)Browser.connect(url)
chromium.launch()Browser.launch({ profile })

Core API map

PlaywrightKoko SDKNotes
browser.newContext()browser.newContext()Client-side grouping
context.newPage()context.newPage()
page.goto()page.goto()+ waitUntil: "done"
page.locator()page.locator()CSS selector
page.getByRole()page.getByRole()DOM heuristics
locator.click()locator.click()
page.evaluate()page.evaluate()
page.screenshot()page.screenshot()PNG/JPEG via CDP
page.pdf()page.pdf()
page.waitForSelector()page.waitForSelector()Uses performSearch

Koko-only additions

APIDescription
page.markdown()Token-efficient page text
page.semanticTree()Pruned a11y DOM
page.findElement()Role/name → backendNodeId
page.node()NodeHandle actions
page.searchGoogle()SERP extract + block detect
page.armDialog()Pre-arm JS dialogs
page.extract()Crawler-optimized extract
captureSessionState()Cookies + storage snapshot

Not in SDK (use CDP or MCP)

  • expect() assertions — use Vitest, Node assert, etc.
  • page.route() / request interception
  • frameLocator() / iframe switching
  • keyboard / mouse standalone objects
  • browser.newBrowserCDPSession() tracing APIs
  • Full getByRole accessibility tree parity

Migration checklist

  1. Replace import { chromium } with import { Browser }
  2. Start Koko CDP server or use Browser.launch()
  3. Swap connectOverCDPBrowser.connect
  4. Optionally adopt waitUntil: "done" for stricter navigation
  5. Replace brittle selectors with NodeHandle for agent flows