[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:e2e":3},"\u003Cp>\u003Ca href=\"https:\u002F\u002Fe2e.com?utm_source=e2e&amp;utm_medium=github&amp;utm_campaign=readme_banner\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Ftester-army\u002Fe2e\u002FHEAD\u002F.github\u002Fassets\u002Freadme-banner.png\" alt=\"e2e, the agentic testing framework\" width=\"100%\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fe2e\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"npm version\" src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fe2e.svg?style=for-the-badge&amp;labelColor=000000\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ftester-army\u002Fe2e\u002Fblob\u002FHEAD\u002FLICENSE\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"License: Apache-2.0\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache--2.0-green.svg?style=for-the-badge&amp;labelColor=000000\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Ftester.army\u002Fdiscord\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"Join the community on Discord\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJoin%20the%20community-5865F2.svg?style=for-the-badge&amp;logo=discord&amp;logoColor=white&amp;labelColor=000000\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F274762\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F274762\" alt=\"tester-army\u002Fe2e | Trendshift\" width=\"250\" height=\"55\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Ch1>e2e\u003C\u002Fh1>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fe2e.com?utm_source=e2e&amp;utm_medium=github&amp;utm_campaign=readme_intro\" rel=\"nofollow ugc noopener\">e2e\u003C\u002Fa> is an end-to-end testing framework for web and mobile apps. Describe a goal in natural language and an agent drives the app to reach it. Check the result with locators and assertions in the same test.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ts\">\u002F\u002F tests\u002Fcheckout.e2e.ts\nimport { test, expect } from 'e2e';\n\ntest('a member upgrades to Pro', async ({ app, agent, screen }) =&gt; {\n  await app.open('\u002Fsettings\u002Fbilling');\n\n  await agent.act('upgrade the workspace to the Pro plan');\n  await agent.assert('the invoice preview shows a prorated amount');\n\n  await expect(screen.getByRole('status')).toContainText('Pro');\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>An agent step that a later assertion verifies records its actions, and the\nnext run replays them with no model calls until the app changes. Tests\nwithout agent steps need no model. Bring your own subscription, API key, or\nlocal model.\u003C\u002Fp>\n\u003Ch2>Quick start\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">npx e2e init\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>init\u003C\u002Fcode> asks for an engine, web or mobile, and a model provider, then writes a\nconfig and an example test. The\n\u003Ca href=\"https:\u002F\u002Fe2e.com\u002Fdocs\u002Fquickstart\" rel=\"nofollow ugc noopener\">quickstart\u003C\u002Fa> covers the rest.\u003C\u002Fp>\n\u003Cp>To see a finished setup in your stack, open\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ftester-army\u002Fe2e\u002Ftree\u002Fmain\u002Fexamples\" rel=\"nofollow ugc noopener\">\u003Ccode>examples\u002F\u003C\u002Fcode>\u003C\u002Fa>:\nVite, Next.js, Astro, Angular, Expo, SwiftUI, Jetpack Compose, Kotlin Multiplatform,\nFlutter, and .NET MAUI, each a standalone project with a passing suite.\u003C\u002Fp>\n\u003Ch2>Packages\u003C\u002Fh2>\n\u003Ch3>Core\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Package\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fe2e\" rel=\"nofollow ugc noopener\">\u003Ccode>e2e\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>The SDK, runner, and CLI.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@e2e-dev\u002Fweb\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Fweb\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Browser engine: Chromium, Firefox, and WebKit through Playwright.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@e2e-dev\u002Fmobile\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Fmobile\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>iOS and Android engine: simulators and emulators through agent-device.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fe2e.com\u002Fdocs\u002Fdecision-models\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Fdecision\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Decision-model executors for bounded semantic actions and assertions, and \u003Ccode>decisionFilter()\u003C\u002Fcode>, which leaves out the tests a pull request is unlikely to affect.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fe2e.com\u002Fdocs\u002Fsubscriptions#use-your-coding-agent\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Facp\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Runs agent steps on your own coding agent (Claude Code or Codex) over the Agent Client Protocol.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>Integrations\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Package\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@e2e-dev\u002Fkernel\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Fkernel\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Kernel hosted browsers for the web engine.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@e2e-dev\u002Flightpanda\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Flightpanda\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Lightpanda, the open-source headless browser, started per run for the web engine.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@e2e-dev\u002Fsmol\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Fsmol\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>smol machines browsers for the web engine: by default, each attempt branches a warm Chromium microVM.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@e2e-dev\u002Ftestmu\" rel=\"nofollow ugc noopener\">\u003Ccode>@e2e-dev\u002Ftestmu\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>TestMu AI (formerly LambdaTest) hosted Android emulators, iOS simulators, and real devices for the mobile engine, and hosted Chrome and Edge for the web engine.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>[\u003Ccode>@e2e-dev\u002Fbrowserstack\u003C\u002Fcode>](\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpack\" rel=\"nofollow ugc noopener\">https:\u002F\u002Fwww.npmjs.com\u002Fpack\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n",1793926091639]