Codegen
Codegen records the taps and typing you perform on a real device and turns them into a runnable taqwright spec. As you drive the app in a browser-based inspector, it picks a stable locator for each element you touch and appends a line of source to the test. It is the fastest way to a first test, and a quick way to discover the right locator for a tricky element.
Start codegen
npx taqwright codegen --project android
This opens the inspector in your browser at http://localhost:4280. codegen is shorthand for
inspect --record, so recording arms automatically the moment you connect to a device.
| Option | Description |
|---|---|
-c, --config <file> | Configuration file. Default: taqwright.config.{ts,mts,js,mjs}. |
--project <name> | Project to record against. Default: the first project in config. |
--port <n> | Preferred local port for the inspector UI. Default: 4280. |
--host <host> | Host to bind the inspector UI. Default: localhost. |
--no-open | Do not automatically open the browser. |
See Command line for the full CLI.
Connect to a device
The inspector opens on a setup page. Connect through a local emulator or device (taqwright starts Appium for you if it is not already running) or a cloud provider (BrowserStack or LambdaTest, with credentials read from the environment). Once connected, a live view of the device appears and recording begins.
Record actions
Interact with the device view and each action is appended to the generated spec. Codegen records the
same actions you would write by hand: tap, double tap, long press, fill, clear, swipe, scroll, pinch,
drag, check and uncheck, focus and blur, key presses, and selectOption for native pickers. See
Actions for what each does.
Pick a locator
Tap an element and codegen proposes a locator for it. It verifies candidate selectors against the live screen and ranks them by uniqueness first, then stability, preferring attribute-based locators over positional ones:
- Android:
getById(resource-id) is preferred, thengetByUiSelector, thengetByXpath. - iOS:
getById(accessibility id) is preferred, thengetByPredicate, thengetByClassChain, thengetByXpath.
When more than one element matches, codegen disambiguates with .nth(i). See the locator strategies in
Writing tests.
Record assertions
Beyond actions, you can record assertions from the inspector, visibility, text, value, checked state,
count, attribute, and the rest. They emit as expect(...) matchers or locator.assert*() calls. See
Assertions.
The generated spec
The recording is a complete, runnable spec:
import { test, expect } from '@taqwright/taqwright';
test('recorded test', async ({ mobile }) => {
await mobile.getById('username_field').fill('emma@demoapp.com');
await mobile.getById('password_field').fill('10203040');
await mobile.getById('login_btn').click();
await expect(mobile.getByText('View All')).toBeVisible();
});
Save and run
Export the spec from the inspector to your project's test directory (it is written as
recorded.spec.ts by default, with a native save dialog on macOS). It lands under tests/ ready to
run:
npx taqwright test
Explore without recording
To browse the live UI tree and build locators without recording anything, open the same inspector in explore mode:
npx taqwright inspect --project android
For the natural-language and recording overview, see Generating tests; for the commands, see Command line.