Skip to main content
Reusable widget automation

When a widget goes off-script, teach FillMatic the moves.

A Recipe tells FillMatic how to operate one custom control: where it appears, what opens it, and which steps complete the interaction. Teach it once; reuse it on every matching fill.

Declarative steps · No custom JavaScript · Stored on your device

recipe / booking-date
Hostname is · booking.example.com
[data-testid="check-in-date"]
  1. 01click@self
  2. 02waitFor[role="dialog"]
  3. 03clickRandom[role="gridcell"] button
  4. 04pressEnter

Use the right tool

Most forms work automatically. Recipes handle the exceptions.

FillMatic already understands native inputs and common ARIA widget patterns. Recipes exist for the custom edge cases where a site needs a specific sequence.

No Recipe needed

Use normal autofill when the control follows native HTML or supported widget behavior.

  • Text, date, select, checkbox, and radio inputs
  • Standard comboboxes and listboxes
  • Supported Radix and ARIA interactions

A Recipe is a good fit

Use one when the widget requires a predictable series of clicks, waits, typing, or key presses.

  • Custom date pickers with popovers
  • Multi-step selectors and location pickers
  • Site-specific controls with stable selectors

Recipes run first

On a matching page, Recipes handle their target before built-in widget adapters get a turn.

  • Your taught behavior wins
  • The same widget is not filled twice
  • One widget failure does not abort the form
A Recipe has three parts

Match the page. Find the widget. Replay the steps.

Scope the Recipe to the right site, target the widget trigger with CSS, then build the interaction from a small, reviewable set of actions. There is no evaluated JavaScript hiding inside it.

clickclickRandomwaitForwaittypeselectOptionpress
Scope
URL matcherChoose the hostname or page pattern where this Recipe is allowed to run.
Target
Widget selectorPoint at the visible trigger using a stable CSS selector.
Replay
Action stepsClick, wait, type, choose, or press keys in the required order.
In the extension

The same steps, in the real Recipe editor.

Pick a target widget, then add the steps. A few habits keep them dependable:

  • Use @self to act on the widget the Recipe matched.
  • Wait for the popover or dialog selector instead of a fixed delay.
  • Pick a random matching option to keep repeated runs varied.
  • Finish with Enter or the site's own confirm control when the widget needs one.
The FillMatic Recipe editor for an MUI Autocomplete: target widget settings beside Click and Click random steps.
Make Recipes reliable

Make every repeated test run more reliable.

Recipes replay the steps you define. Use dependable targets and explicit waits; random choices and generated values can still vary between runs.

Prefer intentional attributes

Use IDs, names, ARIA attributes, or test IDs before generated class names that can change between builds.

[data-testid="country-picker"]

Wait for what actually appears

Target the popover, dialog, or option list with waitFor so slow rendering does not race the next step.

waitFor [role="listbox"]

Keep the URL scope narrow

Match only the pages that use the widget. An empty matcher intentionally makes a Recipe global.

hostname · checkout.example.com
Saved on your device

Review it. Refine it. Run it again.

Recipes live in your browser's local extension storage. Edit their targets and steps in Settings, then reuse them on matching pages. Recipe import and export are not available in this release.

Booking calendar - Recipe structure example
{ "name": "Booking calendar", "active": true, "matcher": { "type": "hostname", "value": "booking.example.com" }, "selector": "[data-testid='check-in-date']", "steps": [ { "kind": "click", "selector": "@self" }, { "kind": "waitFor", "selector": "[role='dialog']" }, { "kind": "clickRandom", "selector": "[role='gridcell'] button" } ] }

Start with normal autofill. Add a Recipe only when you need one.

The built-in engine handles the common path. Recipes give you a clean escape hatch for everything custom.

Add to Chrome