Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

bitti –help

The commands and each one’s options, exactly as this build prints them.

$ bitti --help
bitti: plain-text web tests on real Chrome (through navigera)

usage: bitti <command> [...]

commands:
  run [<file|dir>...]    run scenarios (default: every .bt and .feature file
                         under the current directory)
  lint [<file|dir>...]   check files without a browser
  list [<file|dir>...]   the scenarios a run would take
  merge <dir|file>...    join the jsonl results of shards into one report
  trace [<dir>] [<line>] a trace a run recorded (--trace): every step, or one
  fix [<file>:<line>]    put a suggestion from the last run into a failing step
  record <url>           a browser to use by hand; what you do becomes a
                         scenario
  from-session <name>    what a navigera session did, as a scenario
  navigera <command…>    navigera's commands, built in
                         (bitti navigera -s work goto <url>)
  mcp                    an MCP server: navigera's browser tools and
                         bitti's own
  skill                  the agent skill: the .bt format, steps and expect forms
  --version

`bitti <command> --help` lists a command's options. Steps, locators and
expect forms: `bitti skill`.

exit codes: 0 all passed, 1 a scenario failed, 2 a file or an argument is
wrong, 3 the browser or the app server didn't start

run

$ bitti run --help
usage: bitti run [<file.bt|file.feature|dir>...] [options]

Runs the scenarios in the files, or in every .bt and .feature file under
the directories (default: the current one).

options:
  --base-url <url>       where relative URLs (`goto /cart`) point (else `base`
                         in the file, BITTI_BASE_URL)
  --var <name=value>     a variable for ${name} (repeatable)
  --secrets <file>       NAME=value lines for ${secret:NAME} (the environment
                         comes first); masked in output
  --grep <text>          only scenarios whose name contains it
  --grep-invert <text>   leave out scenarios whose name contains it
  --tag <expr>           only scenarios with this @tag, or a tag expression:
                         "smoke and not slow", "(a or b) and not wip"
                         (repeatable: any of them)
  --last-failed          only the scenarios that failed in the last run (also
                         --lf)
  --max-failures <n>     start no scenario once n have failed (-x: 1); the rest
                         are reported as not run
  --forbid-only          a scenario tagged @only is an error (on by itself under
                         CI); without it, @only runs just those
  --workers <n|auto>     scenarios at once (default auto: half the CPUs, at most
                         8); also -j <n>
  --isolation <how>      context (default): one browser, a browser context per
                         worker; browser: a browser each
  --retries <n>          run a failing scenario again, up to n times; one that
                         then passes is flaky
  --fail-on-flaky        a flaky scenario fails the run
  --shard <i/n>          run the i-th of n slices (for CI matrix jobs)
  --repeat <n>           run every scenario n times (flake hunting: each run is
                         reported, then a pass count)
  --shuffle [<seed>]     run in a random order (the seed is printed; give it
                         again to repeat the order)
  --reporter <name>      console (default), jsonl (one JSON object per scenario
                         on stdout), github (workflow annotations; on by itself
                         under GitHub Actions); repeatable
  --config <file>        settings, a [server] and [env.<name>] profiles
                         (default: ./bitti.toml)
  --env <name>           the config's [env.<name>] profile on top of the rest
  --update-snapshots     a screenshot or JSON snapshot that differs from its
                         baseline (or has none) becomes it (also
                         --update-screenshots)
  --compare-report <k>   what `expect download … compare` keeps: html, json,
                         rows (comma-separated) or none (default html)
  --trace <when>         on-failure or all: each step's page (ax tree, JPEG),
                         console and requests beside the screenshot in
                         trace.jsonl; read it with `bitti trace`, or in --html
  --video <when>         on-failure or all: what the page showed, frame by
                         frame, in the scenario's evidence (video/index.html
                         plays it; linked from --html)
  --junit <file>         also write JUnit XML
  --cucumber <file>      also write Cucumber JSON for the .feature files (step
                         by step)
  --allure <dir>         also write Allure results (a JSON file per scenario
                         run, screenshots attached)
  --html <file>          also write the run as one HTML page (steps, times,
                         failures with their screenshot)
  --json                 print what the scenarios saved, as one JSON object, at
                         the end
  --timeout-ms <ms>      how long an expect retries (default 5000)
  --scenario-timeout-ms <ms> the most one scenario may take (its steps; hooks
                         around it aside); @slow triples it
  --global-timeout-ms <ms> the most the whole run may take: no scenario starts
                         after it, running ones stop there, and the run fails
  --wait-ms <ms>         how long a step waits for its element (default 5000)
  --headed               show the browser
  --slowmo <ms>          wait this long before each step that acts on the page
                         (to watch a --headed run)
  --chromium <path>      the browser to run
  --engine lightpanda    run on Lightpanda (no layout: a fast smoke tier;
                         screenshots and pixel checks fail)
  --electron <app>       test an Electron app: its directory or main script
                         (Electron from its node_modules) or an executable; a
                         fresh app per scenario, one at a time
  --electron-arg <arg>   an argument for the app (repeatable;
                         --electron-arg=<arg> for one starting with -)
  --attach <port|ws://…> run against a browser or an Electron app already
                         running with a DevTools port (one worker; an app
                         attached to goes on from one scenario to the next)
  --evidence <dir>       failure screenshots and downloads (default
                         .bitti/runs/<time>; a directory you name is used as
                         given, links included)
  --watch                after the run, run again each scenario file that
                         changes (polled every 300 ms), until Ctrl-C
  --pause-on-failure     keep the browser at a failure, open to `navigera
                         --attach`, until Enter (one worker)

lint

$ bitti lint --help
usage: bitti lint [<file|dir>...] [--var <name=value>] [--secrets <file>]

Checks .bt and .feature files without a browser: syntax, unknown steps,
and variables nothing sets (warnings: the run's environment may set them).

list

$ bitti list --help
usage: bitti list [<file|dir>...] [--grep <text>] [--tag <tag>]
                      [--shard <i/n>]

The scenarios a run with the same options would take, one per line:
file:line, name and tags.

merge

$ bitti merge --help
usage: bitti merge <dir|file.jsonl>... [--junit <file>] [--html <file>]
                       [--fail-on-flaky]

Joins the results of shards (`run --shard i/n --reporter jsonl`, saved
to a file each) into one console summary, one --junit and one --html, as
if one run had done it. A directory is searched for .jsonl files. Steps
and traces stay with the shards: the joined report has each scenario's
status, time and failure. The time is the longest shard's, as shards
run side by side. Exit: 0 all passed, 1 one failed, 2 nothing to read.

trace

$ bitti trace --help
usage: bitti trace [<dir>] [<line>]

A trace that `run --trace on-failure|all` recorded: every step with its
page, console and requests, or the step at <line> in full, with its
screenshot file and ax tree. <dir> is a run's directory
(.bitti/runs/<time>) or one scenario's in it; by default, the
latest run's.

fix

$ bitti fix --help
usage: bitti fix [<file>:<line>] [--use <n>] [--all [--min <p>]]

Puts a suggestion from the last run into the step that failed. A run keeps,
for each step whose element wasn't found, the elements on the page most like
it (.bitti/last-run.json).

  bitti fix                 list each failing step and its suggestions
  bitti fix shop.bt:12      put suggestion 1 into that step
  --use <n>                     put suggestion n instead
  --all                         fix every failing step with its first
                                suggestion, if it scores --min or more
  --min <p>                     the least score --all takes (0 to 1; 0.6)

record

$ bitti record --help
usage: bitti record <url> [--out <file.bt>] [--scenario <name>] [--headless]
                        [--for <seconds>]
       bitti record --extend <file.bt> [--scenario <name>]
                        [--base-url <url>] [--secrets <file>]

Opens a browser to use by hand; what you do becomes a scenario. With
--extend, runs the scenario to its end first, then records more steps
into it. Needs a display.

from-session

$ bitti from-session --help
usage: bitti from-session <navigera session> [--scenario <name>]
                              [--out <file.bt>]

Writes what a navigera session did as a scenario, its refs turned into
locators that hold between runs.

mcp

$ bitti mcp --help
usage: bitti mcp [--headed] [--chromium <path>]

An MCP server on standard input and output: navigera's browser tools and
bitti_from_session, bitti_run, bitti_failure and bitti_fix.

Made from bitti --help, bitti run --help, bitti lint --help, bitti list --help, bitti merge --help, bitti trace --help, bitti fix --help, bitti record --help, bitti from-session --help, bitti mcp --help.