Skip to content

Instantly share code, notes, and snippets.

View ianjennings's full-sized avatar

Ian Jennings ianjennings

View GitHub Profile

TestDriver 7.9.37.11.21 — Upgrade Changelog

Span: 2026-03-28 → 2026-07-16 · 555 non-merge commits · 198 SDK files changed

This covers everything between the v7.9.3 and v7.11.21 tags. It leads with the changes that alter test behavior on upgrade, because several defaults flipped in ways that are invisible until a test starts failing.


@ianjennings
ianjennings / markdown.md
Last active June 29, 2026 23:59
TestDriver GitHub Agent

TestDriver AI QA Agent

A github bot that writes, debugs, and maintains TestDriver computer-use tests.

Image

Image

./simple-test.sh "Use playwright to open https://example.com and report the title."
{"type":"system","subtype":"init","cwd":"/Users/ianjennings/Development/mcp-coverage","session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","tools":["Task","TaskOutput","Bash","Glob","Grep","ExitPlanMode","Read","Edit","Write","NotebookEdit","WebFetch","TodoWrite","WebSearch","TaskStop","AskUserQuestion","Skill","EnterPlanMode","ToolSearch","mcp__claude_ai_Gmail__create_draft","mcp__claude_ai_Gmail__list_drafts","mcp__claude_ai_Gmail__get_thread","mcp__claude_ai_Gmail__search_threads","mcp__claude_ai_Gmail__label_thread","mcp__claude_ai_Gmail__unlabel_thread","mcp__claude_ai_Gmail__list_labels","mcp__claude_ai_Gmail__label_message","mcp__claude_ai_Gmail__unlabel_message","mcp__claude_ai_Gmail__create_label","mcp__claude_ai_Gmail__update_label","mcp__claude_ai_Gmail__delete_label","mcp__claude_ai_Google_Calendar__list_events","mcp__claude_ai_Google_Calendar__get_event","mcp__claude_ai_Google_Calendar__list_calendars","mcp__claude
@ianjennings
ianjennings / cdp.js
Created June 8, 2026 14:32
TestDriver CDP Cookie Auth
const CDP_CFG = {
nodePath: 'NODE_PATH=/usr/lib/node_modules',
cookieFile: '/tmp/chatgpt-session.json',
};
const CDP_PORT = 9222;
const SNIPPET = {
listPages: ` const targets = await CDP.List({ port: ${CDP_PORT} });
const pages = targets.filter((t) => t.type === 'page');`,
posthogPage: ` const target = pages.find((t) => /posthog\\.com/i.test(t.url || '')) || pages[0];

Monorepo Conversion Architecture Guide

This guide explains how to turn multiple GitHub repositories into a single monorepo with a clean developer experience, predictable releases, and environment-safe operations. It is written for an intermediate full-stack developer and is based on patterns used in this repository.

1. What You Are Building

Target state:

  • One repository with multiple services and shared packages.
  • One consistent local environment via Dev Containers.
# Launch Win11Debloat with selected parameters
& ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) -Silent -RunDefaults
-RemoveApps
-RemoveHPApps
-RemoveDevApps
-RemoveGamingApps
-DisableTelemetry
-DisableSuggestions
-DisableDesktopSpotlight
-DisableLockscreenTips
const startAppScript = fs.readFileSync(path.join(__dirname, "scripts/start.ps1"), "utf-8");
const installScriptWithParams = `
$DownloadedFile = "${installerPath.replace(/\\/g, '\\\\')}"
$InstallerFile = "${installerFile}"
${installScript}
`;
await testdriver.exec('pwsh', installScriptWithParams, 300000);

Testing Todo Creation with Playwright

This tutorial demonstrates how to test a todo app using TodoMVC as an example. Each step shows how to drive the UI with Playwright and verify that new todos render and persist.

Loading TodoMVC

To begin validating todo creation, direct the Playwright page to the hosted demo and define the sample todo data that the flow will reuse.

const TODO_ITEMS = [
 'buy some cheese',
version: 5.5.5
steps:
- prompt: launch a calculator
commands:
- command: exec
lang: shell
windows:
start /B calc.exe
timeout /t 5
- command: wait-for-text

We hope you appreciate your demo of TestDriver.ai made by Dashcam.io.

Follow the directiosn below to merge your demo into your repository

  1. Create a Dashcam account here
  2. Copy the API key from the team page
  3. Add the API key as as a GitHub secret called DASHCAM_WORKSPACE_API. Guide here.
  4. Copy the files from the PR to your repo. The paths are important!

All TestDriver VMs are ephemeral and will be destroyed after the test completes.