Skip to content

Release Notes - v0.7.0

Protocol-agnostic SDK release with BiDi-first, CDP-fallback architecture for improved compatibility.

Highlights

Automatic protocol selection for maximum compatibility.

The SDK now automatically chooses the best protocol for each operation:

  • BiDi First - Try WebDriver BiDi (cross-browser standard) first
  • CDP Fallback - Fall back to Chrome DevTools Protocol when BiDi doesn't support the feature
  • Transparent - No code changes required; existing code works automatically

Protocol-Agnostic Methods

These methods try BiDi first and fall back to CDP automatically:

Method BiDi Command CDP Fallback
SetOffline() vibium:network.setOffline Network emulation
ConsoleMessages() vibium:console.messages Console debugger
ClearConsoleMessages() vibium:console.clear Console debugger

Example:

// Works automatically - tries BiDi, falls back to CDP if needed
err := pilot.SetOffline(ctx, true)

// Get console messages - uses CDP console debugger as fallback
messages, err := pilot.ConsoleMessages(ctx, "error")

Bug Fixes

Fixed BiDi Command Names

Corrected command names to match clicker implementation:

Method Was Sending Now Sends
HandleDialog() vibium:dialog.handle vibium:dialog.accept / vibium:dialog.dismiss
SetExtraHTTPHeaders() vibium:network.setHeaders vibium:page.setHeaders

Improved Test Cleanup

Fixed Chrome process leaks in integration tests:

  • Cleanup now uses a fresh context (not the potentially-timed-out test context)
  • Registered via t.Cleanup() for automatic handling on test end/panic
  • Made cleanup idempotent for safety

Temporarily Disabled Features

Tracing

Tracing functionality is commented out pending clicker support for vibium:tracing.* commands.

Affected: - Pilot.Tracing() method - BrowserContext.Tracing() method - MCP tools: trace_start, trace_stop, trace_chunk_*, trace_group_*

Workaround: Use CDP performance tracing for performance analysis (different from action tracing).

Storage State

StorageState() is limited pending clicker support for vibium:context.storageState.

Workaround: Use JavaScript evaluation to access localStorage/sessionStorage directly:

// Get localStorage
result, _ := pilot.Evaluate(ctx, "JSON.stringify(localStorage)")

// Set localStorage
pilot.Evaluate(ctx, `localStorage.setItem("key", "value")`)

Breaking Changes

None. All changes are backwards compatible.

Installation

go get github.com/plexusone/w3pilot@v0.7.0

Documentation