If Automation AI generated a flow for you and you want to understand what it produced, this page explains each part. If your team has written Playwright or Appium tests before, QA Wolf flows will look familiar. The selectors, interactions, and assertions work the same way. What’s different is the wrapper around them. Every flow is wrapped inDocumentation Index
Fetch the complete documentation index at: https://docs.qawolf.com/llms.txt
Use this file to discover all available pages before exploring further.
flow() from the @qawolf/flows package — it tells the runner what to run, where to run it, and which runtime objects to inject into the callback.
The import statement
Every flow file starts with an import. Which package you import from depends on what you’re testing.| Package | Use when |
|---|---|
@qawolf/flows/web | Testing a website, web app, or Electron desktop app |
@qawolf/flows/ios | Testing a native iOS app |
@qawolf/flows/android | Testing a native Android app |
@qawolf/flows/cli | Running setup, teardown, tasks that don’t need browsers/devices |
For iOS, Android, and CLI flows,
expect is wired to the QA Wolf runner automatically and is not connected to PlaywrightThe flow wrapper
flow() takes three arguments: a name, a configuration, and an async callback containing the test logic.
target and launch to configure startup simultaneously. The target string must exactly match one of the supported values, or your flow will fail to initialize — see Target Literals for the current list.
Callback — the async function containing your test logic. What it receives depends on the launch style and platform (see below).
Launch styles
| Style | When to use |
|---|---|
launch: true | Most flows — default startup, no configuration needed |
| Options object | Startup options are known up front — e.g., persistent browser context |
Explicit launch() | Startup depends on runtime logic — e.g., branching on an environment variable |
Declarative launch — recommended
Passlaunch: true to use the default startup, or pass an options object to customize it. Either way, QA Wolf starts the browser or app before your callback runs, and the callback receives the platform object ready to use.
true when you need to customize startup, such as reusing a browser profile. See the Web API Reference for the full list of options.
| Platform | Callback receives |
|---|---|
| Web browser | page, context, optional browser |
| Web (Electron) | page |
| iOS | driver — the Appium/WebdriverIO session for the device |
| Android | driver — the Appium/WebdriverIO session for the device |
| CLI | nothing additional — only inputs, setOutput, and test |
Explicit launch — advanced flows only
For advanced cases where the startup depends on runtime logic, you can calllaunch() explicitly inside the callback. See the Web API Reference for details. For Electron desktop app testing, see Testing Electron apps.
Callback parameters
Every flow callback receives three parameters regardless of platform:inputs — values passed into the flow from outside. Use this to read data published by another flow in the same run. Keys are uppercase by convention, e.g. inputs["EMAIL"].
setOutput(...) — publishes one or more key-value pairs that a later flow in the same run can read via its inputs. Keys are uppercase by convention. You can publish multiple values in a single call:
A consumer flow will not run until its producer has called
setOutput. See Passing data between flows for how producers and consumers work together.test(...) — wraps a named sub-step, grouping actions and assertions under a label that appears in your results. When a step fails, the label tells you exactly where in the flow the failure happened.
page, context, browser, or driver) as shown in the launch styles section above.
For the full callback context shape, see the API Reference for Web, Android, and iOS.
launch(), expect, device, and platform.target are stubs in the package code, and they are replaced by the runner at execution time. They only work while a flow is running inside the QA Wolf runner — keep them inside the flow callback, not at the module level. Module-level code should be limited to imports, constants, and pure helper functions.
Environment variables
Reference environment variables withprocess.env.VAR_NAME. They are typically used in the Arrange section before any interactions begin.
The AAA framework
QA Wolf flows follow the Arrange, Act, Assert (AAA) format. Arrange sets up state before the interaction.Act performs the interaction being tested.
Assert verifies the expected outcome.