Donobu LogoDonobu Logo
  • Blog
  • Documentation
  • SDK
  • FAQ
  • Contact
Sign Up
Download
Donobu LogoDonobu Logo

AI QA. Self-healing. Zero friction.

© Copyright 2025 Donobu. All Rights Reserved.

About
  • Blog
  • Contact
Product
  • SDK
  • Documentation
  • Context Buffet
Legal
  • Terms of Service
  • Privacy Policy
  • Cookie Policy

Your Playwright TestsSupercharged with page.ai()

Donobu adds a page.ai() method to Playwright, letting you write tests in plain English — no selectors, no flake, no new framework.

View Package

Why Developers Choose Donobu

Describe intent, not selectors

Withpage.ai(), you write natural language instructions directly in your Playwright tests. Donobu selects the right elements and executes the actions without brittle locators.

Because the SDK layers directly onto Playwright, you can blend intent-driven steps with existing code-based ones. Tests heal themselves as layouts change without disrupting your workflow.

Keep authoring outcomes. Donobu keeps selectors, retries, and context synchronized so your team ships faster.

Donobu AI prompt
  page.ai("Submit the form with made up data");
Page being tested
First Name
Yuma
Last Name
Edo
Street Address
755 Market St
City
San Francisco
State
CA
Website
https://www.example.com
Auto-filled by Donobu

Create Resilient E2E Tests That Evolve With Your UI

Compare brittle Playwright selectors with Donobu’s layered self-healing and AI-assisted fallbacks.

Traditional Playwright Test
No self-healing or recovery
import { test, expect } from '@playwright/test';

test('Fall theme test', async ({ page }) => {
  await page.goto('https://www.starbucks.com/menu');

  // Every interaction depends on CSS selectors that break on redesign.
  await page.locator('#truste-consent-button').click();

  // Click on the "Featured" link
  await page.getByRole('link', { name: 'Featured' }).click();

  // Verify text content on the page
  const expectedText = 'Fall favorites meet new arrivals with a protein boost';
  await expect(
    page.locator('.content-block_innerContentContainer__oCxU9')
  ).toHaveText(expectedText);
});
Full Self-Healing Test
page.ai() steps auto-heal
import { test } from 'donobu';

test('Test survives modals and popups', async ({ page }) => {
  await page.goto('https://www.starbucks.com');

  await page.ai('Navigate to the featured drinks menu');

  await page.visuallyAssert({
    assertionToTestFor:
      'The page has an autumn theme.',
  });
});

Here's How Donobu Works

3-step flow to capture your intent and execute resilient, self-healing tests.

Step One

Write human-friendly instructions

Describe the desired action or overall test intent exactly as you would in natural language with your coding assistant.

Step Two

SDK interprets and maps test flows

Donobu parses intent, chooses the right browser APIs, and keeps selectors in sync behind the scenes.

Step Three

Execute and enable self-healing

Flows run locally, ready to drop into CI. Self-healing fails over to AI-powered recovery when UIs change. Updating tests with PRs.

Why You Should Choose Donobu

Donobu extends Playwright with AI, keeping what works and removing what breaks — selectors, retries, and flakiness.

Conventional Approach

  • Selectors are tightly coupled to the application’s markup.
  • Every step must be manually translated into code, making E2E tests slower to write than unit or integration tests.
  • Even small UI changes break flows and require constant upkeep.
  • Tests usually come late in the dev cycle, after features are “done.”

Testing with Donobu

  • Natural-language intent stays stable even when the UI shifts underneath.
  • page.ai() interprets plain-English instructions and generates the required selectors. Fixes at runtime on failure.
  • Author tests as fast as you can describe them.
  • Your flows stay stable even when the UI shifts underneath.
  • Because tests aren’t tied to implementation details, you can write them early — even before the UI is final.