> ## Documentation Index
> Fetch the complete documentation index at: https://e2e.tester.army/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Open source AI testing for web and mobile apps. Spend less time on tests and more time building.

e2e is an open source testing framework for web and mobile apps. A test can
use exact [locators](https://e2e.tester.army/docs/core-concepts#locators) and
[assertions](https://e2e.tester.army/docs/reference/expect#locator-matchers), [goals](https://e2e.tester.army/docs/core-concepts#goals)
in natural language that an agent completes, or both in the same test.

<VideoCard
  id="NEawZb6Hssw"
  title="Watch e2e explained in 2 minutes"
  subtitle="Chain agent goals with locator checks, run one test on web, iOS, and Android, and set up a project in a minute."
/>

```ts title="tests/checkout.e2e.ts"

test('a member upgrades to Pro', async ({ app, agent, screen }) => {
  await app.open('/settings/billing');

  await agent.act('upgrade the workspace to the Pro plan');
  await agent.assert('the invoice preview shows a prorated amount');

  await expect(screen.getByRole('status')).toContainText('Pro');
});
```

## Why e2e

- **Less time on tests.** Write a goal instead of a script of selectors and
  waits. When the UI changes, the agent adapts, so you fix fewer tests.
- **Cheap runs.** e2e records an `agent.act` step when a later check passes.
  The next run [replays it](https://e2e.tester.army/docs/cache) with no model calls, and hands back to
  the agent when the app changed. With the built-in agent, `assert`,
  `waitFor`, and `extract` always call the model.

## How it works

- **Targets.** Each test runs one time per target, such as Chromium or an
  iPhone simulator. The [web engine](https://e2e.tester.army/docs/web) drives browsers through
  Playwright. The [mobile engine](https://e2e.tester.army/docs/mobile) drives iOS simulators and Android
  emulators through agent-device. You can also
  [write your own](https://e2e.tester.army/docs/writing-an-engine).
- **Agent steps.** `agent.act` completes a goal. `agent.assert`,
  `agent.waitFor`, and `agent.extract` judge the screen. Use your own
  [subscription](https://e2e.tester.army/docs/subscriptions), [API key, or local model](https://e2e.tester.army/docs/models). Tests
  without agent steps need no model.
- **Reports.** The runner [redacts registered secrets](https://e2e.tester.army/docs/security) from model
  input. It records steps, failures, and artifacts in a
  [report](https://e2e.tester.army/docs/debugging) that you or your coding agent can read.

## Get started

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    One prompt for your coding agent, or set up by hand.
  </Card>
  <Card title="Example projects" icon="folder-open" href="/example-projects">
    Run a standalone web or mobile app that already has e2e tests.
  </Card>
  <Card title="Core concepts" icon="pen-to-square" href="/core-concepts">
    Goals, assertions, and locators.
  </Card>
  <Card title="Coding agents" icon="robot" href="/coding-agents">
    Let your coding agent write, run, and debug tests.
  </Card>
</CardGroup>
