<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>E2E Testing on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/e2e-testing/</link>
        <description>Recent content in E2E Testing on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 04 Oct 2026 21:16:41 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/e2e-testing/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>e2e</title>
        <link>https://producthunt.programnotes.cn/en/p/e2e/</link>
        <pubDate>Sun, 04 Oct 2026 21:16:41 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/e2e/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1696550580343-4f339143b465?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3OTExMTk3NzR8&amp;ixlib=rb-4.1.0" alt="Featured image of post e2e" /&gt;&lt;h1 id=&#34;tester-armye2e&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tester-army/e2e&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;tester-army/e2e&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;a href=&#34;https://tester.army/e2e?utm_source=e2e&amp;utm_medium=github&amp;utm_campaign=readme_banner&#34;&gt;&lt;img src=&#34;./.github/assets/readme-banner.png&#34; alt=&#34;e2e, the open source AI testing framework by TesterArmy&#34; width=&#34;100%&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://tester.army?utm_source=e2e&amp;utm_medium=github&amp;utm_campaign=readme_badge&#34;&gt;&lt;img alt=&#34;Made by TesterArmy&#34; src=&#34;./.github/assets/made-by-testerarmy.svg&#34; /&gt;&lt;/a&gt;
  &lt;a href=&#34;https://www.npmjs.com/package/e2e&#34;&gt;&lt;img alt=&#34;npm version&#34; src=&#34;https://img.shields.io/npm/v/e2e.svg?style=for-the-badge&amp;labelColor=000000&#34; /&gt;&lt;/a&gt;
  &lt;a href=&#34;./LICENSE&#34;&gt;&lt;img alt=&#34;License: Apache-2.0&#34; src=&#34;https://img.shields.io/badge/license-Apache--2.0-green.svg?style=for-the-badge&amp;labelColor=000000&#34; /&gt;&lt;/a&gt;
  &lt;a href=&#34;https://tester.army/discord&#34;&gt;&lt;img alt=&#34;Join the community on Discord&#34; src=&#34;https://img.shields.io/badge/Join%20the%20community-5865F2.svg?style=for-the-badge&amp;logo=discord&amp;logoColor=white&amp;labelColor=000000&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h1 id=&#34;e2e&#34;&gt;e2e
&lt;/h1&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://tester.army/e2e?utm_source=e2e&amp;amp;utm_medium=github&amp;amp;utm_campaign=readme_intro&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;e2e&lt;/a&gt; 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.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// tests/checkout.e2e.ts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;expect&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;e2e&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a member upgrades to Pro&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;screen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/settings/billing&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;act&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;upgrade the workspace to the Pro plan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;the invoice preview shows a prorated amount&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;expect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;screen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getByRole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toContainText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Pro&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;An agent step that a later assertion verifies records its actions, and the
next run replays them with no model calls until the app changes. Tests
without agent steps need no model. Bring your own subscription, API key, or
local model.&lt;/p&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick start
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx e2e init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;init&lt;/code&gt; asks for an engine, web or mobile, and a model provider, then writes a
config and an example test. The
&lt;a class=&#34;link&#34; href=&#34;https://e2e.tester.army/docs/quickstart&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;quickstart&lt;/a&gt; covers the rest.&lt;/p&gt;
&lt;h2 id=&#34;packages&#34;&gt;Packages
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Package&lt;/th&gt;
					&lt;th&gt;What it does&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/e2e&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;e2e&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;The SDK, runner, and CLI.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@e2e-dev/web&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;@e2e-dev/web&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Browser engine: Chromium, Firefox, and WebKit through Playwright.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@e2e-dev/mobile&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;@e2e-dev/mobile&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;iOS and Android engine: simulators and emulators through agent-device.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@e2e-dev/github&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;@e2e-dev/github&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Reporter that posts results as a pull request comment.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@e2e-dev/kernel&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;@e2e-dev/kernel&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Kernel hosted browsers for the web engine.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/@e2e-dev/eas&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;@e2e-dev/eas&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;EAS Simulators hosted iOS simulators and Android emulators for the mobile engine.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://e2e.tester.army/docs/decision-models&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;@e2e-dev/decision&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Decision-model executors for bounded semantic actions and assertions.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;documentation&#34;&gt;Documentation
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://e2e.tester.army/docs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;e2e.tester.army/docs&lt;/a&gt;. The &lt;code&gt;e2e&lt;/code&gt; package ships
every page, so coding agents can read them offline in &lt;code&gt;node_modules/e2e/docs&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;./CONTRIBUTING.md&#34; &gt;CONTRIBUTING.md&lt;/a&gt;. Questions go to
&lt;a class=&#34;link&#34; href=&#34;https://tester.army/discord&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;security&#34;&gt;Security
&lt;/h2&gt;&lt;p&gt;Please don&amp;rsquo;t open public issues for security vulnerabilities. Follow
&lt;a class=&#34;link&#34; href=&#34;./SECURITY.md&#34; &gt;SECURITY.md&lt;/a&gt; and report them to
&lt;a class=&#34;link&#34; href=&#34;mailto:security@tester.army&#34; &gt;security@tester.army&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;telemetry&#34;&gt;Telemetry
&lt;/h2&gt;&lt;p&gt;The CLI sends anonymous usage data, such as which commands and engines run and
where runs fail, but no test content, app content, or credentials. Opt out with
&lt;code&gt;npx e2e telemetry disable&lt;/code&gt; or &lt;code&gt;E2E_TELEMETRY_DISABLED=1&lt;/code&gt;.
&lt;a class=&#34;link&#34; href=&#34;https://e2e.tester.army/docs/telemetry&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Telemetry&lt;/a&gt; lists every field.&lt;/p&gt;
&lt;h2 id=&#34;status&#34;&gt;Status
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
e2e is in active development on the way to 1.0. APIs and config can still
change between minor releases.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;made-by-testerarmy&#34;&gt;Made by TesterArmy
&lt;/h2&gt;&lt;p&gt;e2e is built by &lt;a class=&#34;link&#34; href=&#34;https://tester.army/?utm_source=e2e&amp;amp;utm_medium=github&amp;amp;utm_campaign=readme_footer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;TesterArmy&lt;/a&gt;,
the agentic testing platform that runs natural language tests on web and mobile
apps, on every pull request or on a schedule.&lt;/p&gt;
&lt;p&gt;Apache-2.0.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
