// Open Source Packages

I build packages for problems I keep running into. Every package exists because I got tired of solving the same thing twice, and because I believe reusable accelerators beat AI regeneration.

Each package is designed to be small, focused, and AI-token-aware: when an AI generates a test, it should use these building blocks rather than reinvent them. Generators and accelerators over regeneration. That's the principle.

// npm Packages @cerios

@cerios/cerios-builder npm

Type-safe builder pattern for test data. Define business-logic defaults that always produce valid objects, then override only what matters for each test. Each test owns its data, guaranteeing isolation.

Workshop presented at Test Automation Days

@cerios/csv-nested-json npm

Convert CSV files to deeply nested JSON. Non-technical testers understand spreadsheets. This bridges their domain knowledge directly into data-driven tests without requiring them to learn JSON.

npm

@cerios/playwright-expectly npm

50+ custom matchers extending Playwright's built-in expect. Smart assertions for strings, dates, arrays, numbers, and locators, so your test reads like a specification, not like debugging code.

npm

@cerios/playwright-step-decorator npm

Enhanced step decorator for Playwright with dynamic parameter placeholders in step descriptions and accurate source locations. Makes test reports actually useful because you see what happened with which data.

npm

@cerios/playwright-table npm

HTML table testing with a fluent API. No more painful row-by-row, column-by-column locator chains. Define expected data, and the matcher handles the DOM traversal for you.

npm

@cerios/xml-poto npm

TypeScript XML serialization with decorators, inspired by C#'s XmlSerializer. Bidirectional, type-safe, zero config. Built for teams that deal with SOAP or XML-heavy APIs and want the same developer experience as JSON.

npm

// NuGet (Legacy)

Selenium.DefaultWaitHelpers NuGet

My first open-source package with 38,000+ downloads and counting. Born from frustration: Selenium's built-in waits were limited and didn't support WebElement-level waiting at all. This package fixed that with simplified, chainable wait conditions.

No longer maintained (I've moved on to Playwright and TypeScript), but it still has a special place as the package that started it all. Sometimes the best motivation to build something is a tool that almost does what you need.

C# Selenium No longer maintained