Agent skill

E2E Testing

by langflow-ai in langflow-ai/langflow

Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.

MITAuto-check passedTesting & QA

Install E2E Testing

skills CLI
$ npx skills add langflow-ai/langflow --skill e2e-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install langflow-ai/langflow e2e-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/langflow-ai/langflow.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/e2e-testing .claude/skills/e2e-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
e2e-testing
GitHub stars
156k
Token cost
~3.3k tokens
SKILL.md length
968 words
Files
4 (incl. references)
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.

  • Works in 5 steps: getByTestId — Most stable, used 95% of… → getByRole — For buttons, headings, and… → getByText — For visible text content → …
  • The user asks to write
  • SKILL.md covers When to Apply, Tech Stack, Key Commands and Configuration, plus 10 more sections
  • Calls npx; needs OPENAI_API_KEY

What it does

E2E Testing is an agent skill from langflow-ai/langflow. Write and review Playwright E2E tests for Langflow. Trigger when the user asks to write, fix, or review E2E tests, spec files, Playwright tests, or integration tests that exercise the full UI. Also trigger when modifying data-testid attributes, test helpers in tests/utils/, or fixture configuration.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/fixtures.md`, `references/helpers.md` and `references/selectors.md`).

It sits in Testing & QA, covering End-to-end testing, Browser testing and Integration testing. It works with Playwright. The repository describes itself as: Langflow is a powerful tool for building and deploying AI-powered agents and workflows. The licence is MIT.

When your agent uses it

  • The user asks to write
  • Review E2E tests
  • Playwright tests
  • Integration tests that exercise the full UI

Example prompts

  • “/e2e-testing”

Requirements

  • Python 3
  • Node.js
  • A credential in OPENAI_API_KEY

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. getByTestId — Most stable, used 95% of the time in Langflow
  2. getByRole — For buttons, headings, and form elements
  3. getByText — For visible text content
  4. waitForSelector — For CSS selectors and dynamic elements
  5. locator — For complex selectors (CSS, XPath)

What it can do on your machine

Read from SKILL.md and the folder at commit 504c02f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENAI_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

E2E Testing loads about 3.3k tokens when it runs, and up to ~7.1k if it reads all its reference files. Until then it costs about 78 tokens; SKILL.md has 968 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from langflow-ai/langflow at commit 504c02f, republished under its MIT licence (© langflow-ai). 968 words, ~3,318 tokens.

Download SKILL.mdSave it as .claude/skills/e2e-testing/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
e2e-testing
description
Write and review Playwright E2E tests for Langflow. Trigger when the user asks to write, fix, or review E2E tests, spec files, Playwright tests, or integration tests that exercise the full UI. Also trigger when modifying data-testid attributes, test helpers in tests/utils/, or fixture configuration.

Langflow E2E Testing (Playwright)

When to Apply

  • User asks to write E2E tests for a feature or flow
  • User asks to fix a failing E2E test
  • User asks to review E2E test coverage
  • User modifies data-testid attributes in components (may break existing tests)
  • User changes test utilities in src/frontend/tests/utils/

Do NOT apply when:

  • User asks about unit tests (use frontend-testing skill for Jest)
  • User asks about backend tests (use backend-code-review skill for pytest)

Tech Stack

ToolVersionPurpose
Playwright1.59.1E2E test runner + browser automation
Chromium(bundled)Default browser (Firefox/Safari disabled)
Custom fixturestests/fixtures.tsAuto-detects API errors and flow execution failures

Key Commands

bash
# Run all E2E tests
npx playwright test

# Run tests filtered by tag
npx playwright test --grep "@release"
npx playwright test --grep "@workspace"
npx playwright test --grep "@starter-projects"

# Run a specific test file
npx playwright test tests/core/features/run-flow.spec.ts

# Debug mode (headed browser + step through)
npx playwright test --debug

# Show HTML report after run
npx playwright show-report

# Update snapshots (if used)
npx playwright test --update-snapshots

Configuration

File: src/frontend/playwright.config.ts

SettingValueWhy
fullyParalleltrueTests run in parallel for speed
timeout5 minutesFlow builds can be slow; prevents false timeouts
retries3 (local), 2 (CI)Flaky network/rendering issues; retries catch them
workers2Balances speed and resource usage
actionTimeout20sIndividual action timeout (click, fill, etc.)
traceon-first-retryCaptures trace on failures for debugging
baseURLhttp://localhost:3000Vite dev server

WebServer: Playwright auto-starts backend (uvicorn on 7860) + frontend (npm start on 3000).

Directory Structure

src/frontend/tests/
├── fixtures.ts                     # Custom test fixture with error detection
├── globalTeardown.ts               # Cleanup (removes temp DB after tests)
├── core/
│   ├── features/                   # Main feature tests (run-flow, playground, etc.)
│   ├── integrations/               # Starter project / template tests
│   ├── regression/                 # Bug regression tests
│   └── unit/                       # Component-level Playwright tests
├── extended/
│   ├── features/                   # Extended features (MCP, auto-save, etc.)
│   ├── integrations/               # Extended integrations
│   └── regression/                 # Extended regressions
└── utils/                          # 37+ shared helper functions

File Naming

  • kebab-case with .spec.ts suffix: run-flow.spec.ts, playground.spec.ts, flow-lock.spec.ts
  • Template tests may use spaces: Document QA.spec.ts, Social Media Agent.spec.ts
  • Sharded tests for parallelization: chatInputOutputUser-shard-0.spec.ts

Note: E2E tests use .spec.ts (Playwright convention). Unit tests use .test.tsx (Jest convention). Do not mix them.

Test Anatomy

Basic Test
typescript
import { expect, test } from "../../fixtures";
import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";

test(
  "user should be able to run a flow successfully",
  { tag: ["@release", "@workspace"] },
  async ({ page }) => {
    await awaitBootstrapTest(page);

    // Arrange: Create a flow
    await page.getByTestId("blank-flow").click();

    // Act: Add components and run
    await page.getByTestId("sidebar-search-input").fill("Chat Output");
    // ... setup ...

    // Assert: Verify result
    await expect(page.getByTestId("build-status-success")).toBeVisible({ timeout: 30000 });
  },
);
With test.describe
typescript
test.describe("Flow Lock Feature", () => {
  test(
    "should lock and unlock a flow",
    { tag: ["@release", "@api"] },
    async ({ page }) => {
      // ...
    },
  );

  test(
    "should prevent editing when locked",
    { tag: ["@release"] },
    async ({ page }) => {
      // ...
    },
  );
});
With Serial Mode (tests that depend on order)
typescript
test.describe.configure({ mode: "serial" });

test("step 1: create flow", async ({ page }) => { /* ... */ });
test("step 2: edit flow", async ({ page }) => { /* ... */ });
test("step 3: delete flow", async ({ page }) => { /* ... */ });
With Event Delivery Modes (streaming/polling/direct)
typescript
import { withEventDeliveryModes } from "../../utils/withEventDeliveryModes";

withEventDeliveryModes(
  "Document Q&A should work",
  { tag: ["@release", "@starter-projects"] },
  async ({ page }) => {
    // This test runs 3 times: streaming, polling, direct
    // Each mode is configured automatically via route interception
  },
);

Tags System

Every test MUST be tagged with @release — the release run greps for it, so an untagged or wrongly-tagged spec silently drops out of release coverage. Add the domain tag(s) below on top of @release (a test can have more than one). These six are the only allowed tags; do not invent new ones.

TagPurposeWhen to Use
@releasePart of the release run (required on every spec)All tests
@workspaceWorkspace/flow managementCreating, editing, deleting flows
@apiAPI-dependent featuresTests that call backend endpoints
@databaseDatabase operationsTests involving persistence
@componentsComponent-level testsIndividual component behavior
@starter-projectsTemplate/starter project testsPre-built flow templates
typescript
// Right: tag your test
test("my feature test", { tag: ["@release", "@workspace"] }, async ({ page }) => { ... });

// Wrong: no tags — test can't be filtered
test("my feature test", async ({ page }) => { ... });

Custom Fixtures: Error Detection

Always import test and expect from ../../fixtures, NOT from @playwright/test.

typescript
// Right
import { expect, test } from "../../fixtures";

// Wrong — bypasses error detection
import { expect, test } from "@playwright/test";

Why: The custom fixture automatically monitors all /api/ responses and fails the test if:

  • HTTP 400, 404, 422, or 500 errors occur
  • Flow execution returns error: true in event streams
  • Python exceptions appear in streamed responses

To opt-in to expected errors (e.g., testing error handling):

typescript
test("should show error on invalid input", { tag: ["@release"] }, async ({ page }) => {
  page.allowFlowErrors();  // Allow flow errors for this test
  // ... test that expects errors ...
});

Selector Strategy

Priority (in order of preference)
  1. getByTestId — Most stable, used 95% of the time in Langflow
  2. getByRole — For buttons, headings, and form elements
  3. getByText — For visible text content
  4. waitForSelector — For CSS selectors and dynamic elements
  5. locator — For complex selectors (CSS, XPath)
Common data-testid Patterns

Canvas & Navigation:

  • blank-flow — New blank flow button
  • sidebar-search-input — Component search
  • canvas_controls_dropdown — Canvas controls menu
  • fit_view, zoom_out, zoom_in — Canvas controls
  • react-flow-id — ReactFlow canvas container

Component Fields:

  • popover-anchor-input-{fieldname} — Input field for a component parameter
  • input-chat-playground — Playground chat input
  • div-chat-message — Chat message in playground

Actions:

  • add-component-button-{component} — Add component to canvas
  • button-send — Send chat message
  • button_run_{component} — Run specific component
  • publish-button, save-flow-button — Flow actions
  • edit-fields-button — Toggle inspection panel field editor

Modals & Panels:

  • modal-title — Modal heading
  • icon-Globe — Global variables
  • icon-Lock — Flow lock toggle
  • session-selector — Playground session switcher
Important: Global Variables and Badges

When a component field has a global variable selected (load_from_db: true + value: "OPENAI_API_KEY"), the field renders a badge instead of an <input> element. This means getByTestId("popover-anchor-input-api_key") will NOT find the element — it doesn't exist in the DOM.

Templates with global variables pre-selected: Market Research, Price Deal Finder, Research Agent. Templates without (input IS rendered): Instagram Copywriter.

Show full SKILL.md (370 more words)Show less

Core Helper Functions

Located in src/frontend/tests/utils/:

FunctionWhat it DoesWhen to Use
awaitBootstrapTest(page)Waits for app to fully loadStart of every test
initialGPTsetup(page)Full setup: adjustView → updateComponents → selectModel → addKey → adjustView → unselectNodesTests that need OpenAI configured
adjustScreenView(page, opts?)Fit view + zoom outAfter adding components to canvas
zoomOut(page, times)Zoom out N timesWhen components are too small
selectGptModel(page)Selects gpt-4o-mini for all Language Model nodesGPT-dependent tests
addOpenAiInputKey(page)Fills OPENAI_API_KEY for all openai_api_key fieldsTests requiring API key
enableInspectPanel(page)Toggles inspection panel ONMUST call before edit-fields-button
disableInspectPanel(page)Toggles inspection panel OFFCleanup after inspection
updateOldComponents(page)Clicks "Update all" if outdated components existAfter loading saved flows
unselectNodes(page)Clicks empty canvas area to deselect all nodesAfter node operations
renameFlow(page, { flowName })Renames the current flowFlow management tests
uploadFile(page, filename)Uploads a file from test assetsFile upload tests
withEventDeliveryModes(...)Runs test 3x: streaming, polling, directStarter project tests
initialGPTsetup Options
typescript
await initialGPTsetup(page);  // All steps

await initialGPTsetup(page, {
  skipAdjustScreenView: true,
  skipUpdateOldComponents: true,
  skipSelectGptModel: true,
});
Inspection Panel Pattern (CRITICAL)
typescript
// MUST enable inspection panel FIRST
await enableInspectPanel(page);

// Click a node to select it
await page.getByTestId("title-OpenAI").click();

// Open field editor
await page.getByTestId("edit-fields-button").click();

// Toggle field visibility
await page.getByTestId("showmodel_name").click();

// Close field editor
await page.getByTestId("edit-fields-button").click();

If you skip enableInspectPanel(page), the edit-fields-button will NOT be visible.

Skip Patterns

typescript
// Skip test if env var missing
test.skip(!process?.env?.OPENAI_API_KEY, "OPENAI_API_KEY required to run this test");

// Skip test unconditionally with reason
test.skip(true, "Feature not yet implemented with new designs");

Writing Good E2E Tests

Do:
  • Tag every test with @release (plus any domain tags that apply)
  • Import from ../../fixtures, not @playwright/test
  • Start with awaitBootstrapTest(page) — always
  • Use getByTestId for stable selectors
  • Set explicit timeouts on waitForSelector and expect(...).toBeVisible() for async operations
  • Test the complete user flow: setup → action → verification
  • Use withEventDeliveryModes for tests that involve flow execution (chat, build)
Don't:
  • Don't use page.waitForTimeout() unless absolutely necessary — prefer waitForSelector or expect().toBeVisible()
  • Don't hardcode API keys — read from process.env.OPENAI_API_KEY
  • Don't skip tests without a reason — always provide the second argument to test.skip()
  • Don't import from @playwright/test — use the custom fixtures
  • Don't forget enableInspectPanel(page) before accessing edit-fields-button
  • Don't assume input fields exist when global variables are selected (badge renders instead)
Challenge Tests (Apply Here Too)

E2E tests should also cover adversarial scenarios:

  • Invalid input: paste 10K characters, special characters (<script>alert(1)</script>), empty submissions
  • Network interruption: what happens if the user loses connection mid-build?
  • Permission boundaries: can a user access another user's flow via direct URL?
  • Concurrent actions: double-click delete, rapid chat messages
  • Error recovery: does the UI recover gracefully from a 500 error?

References

© langflow-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in .agents/skills/e2e-testing of langflow-ai/langflow.

  • SKILL.md
  • references/fixtures.md
  • references/helpers.md
  • references/selectors.md

Open the folder on GitHubat commit 504c02f

Compare with similar skills

E2E Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

E2E Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
E2E Testing this skilllangflow-ai/langflow156k—~3.3kAutomated safety check: PassMIT
Kouchou AI Testingdigitaldemocracy2030/kouchou-ai171—~355Automated safety check: PassAGPL-3.0
Dotnet Testingnovotnyllc/dotnet-artisan233—~972Automated safety check: PassMIT
Dotnet Testingmacalbert/envilder138—~1.6kAutomated safety check: PassMIT
Supercheck Testing QAsupercheck-io/supercheck215—~942Automated safety check: PassAGPL-3.0
Testing Guidemobazha/mobazha-unified165—~1.7kAutomated safety check: PassMPL-2.0

Similar skills

  • Kouchou AI Testing

    digitaldemocracy2030/kouchou-ai

    Testing commands and strategy for the kouchou-ai repo, including unit/integration tests and Playwright E2E rules.

    171 GitHub stars~355 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Dotnet Testing

    novotnyllc/dotnet-artisan

    Defines .NET test strategy and implementation patterns across xUnit v3 (Facts, Theories, fixtures, IAsyncLifetime), integration testing (WebApplicationFactory, Testcontainers), Aspire testing…

    233 GitHub stars~972 tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Dotnet Testing

    macalbert/envilder

    Mandatory testing conventions for .NET (xUnit, AwesomeAssertions).

    138 GitHub stars~1.6k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Supercheck Testing QA

    supercheck-io/supercheck

    Test or validate Supercheck changes using package checks, Jest, Playwright UI/API E2E, recorder browser tests, contract tests, AI SRE acceptance, release evidence, and commit/merge readiness gates.

    215 GitHub stars~942 tokensUpdated today
    Testing & QAAuto-check passed
  • Testing Guide

    mobazha/mobazha-unified

    Guide for writing unit tests (Vitest), integration tests, and E2E tests (Playwright) following Mobazha project conventions.

    165 GitHub stars~1.7k tokensUpdated 4 days ago
    Testing & QAAuto-check passed
  • Cover

    yonatangross/orchestkit

    Generate tests that do not exist yet. An agent skill from yonatangross/orchestkit.

    288 GitHub stars~6.3k tokensUpdated yesterday
    Testing & QAAuto-check: notes

More from langflow-ai/langflow

All 10 skills in this repo
  • Backend Code Review

    langflow-ai/langflow

    Review backend code for quality, security, maintainability, and best practices based on established checklist rules.

    156k GitHub stars~3.5k tokensUpdated today
    Auto-check: notes
  • Component Refactoring

    langflow-ai/langflow

    Refactor high-complexity React components in Langflow frontend.

    156k GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Frontend Query Mutation

    langflow-ai/langflow

    Guide for implementing Langflow frontend query and mutation patterns with Axios and TanStack React Query v5.

    156k GitHub stars~979 tokensUpdated today
    Auto-check passed
  • Ibm A11y Level1 Audit

    langflow-ai/langflow

    Perform a scoped IBM Equal Access Level 1 compliance audit of a chosen Langflow frontend surface (routes, components, or a PR) and produce a findings report mapped to WCAG/IBM Level 1 criteria.

    156k GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Frontend I18n

    langflow-ai/langflow

    Add, change, or review user-facing text in the Langflow frontend using the i18n system (i18next / react-i18next).

    156k GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Ibm A11y PR Remediation

    langflow-ai/langflow

    Scan every frontend surface touched by the current PR/branch for IBM Equal Access Level 1 accessibility issues and fix all in-scope violations by default.

    156k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about E2E Testing

What does E2E Testing do?

Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow. E2E Testing is an agent skill from langflow-ai/langflow. Write and review Playwright E2E tests for Langflow.

When should I use E2E Testing?

E2E Testing fits situations like: the user asks to write; review E2E tests; playwright tests; integration tests that exercise the full UI.

How do I install E2E Testing in Claude Code?

Run `npx skills add langflow-ai/langflow --skill e2e-testing -a claude-code`. Or copy the skill folder (.agents/skills/e2e-testing in langflow-ai/langflow) into .claude/skills/e2e-testing in your project. Claude Code loads it when a task matches its description.

How do I install E2E Testing in Codex?

Run `npx skills add langflow-ai/langflow --skill e2e-testing -a codex`. Or copy the skill folder (.agents/skills/e2e-testing in langflow-ai/langflow) into .agents/skills/e2e-testing in your project. Codex loads it when a task matches its description.

Can I use E2E Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add langflow-ai/langflow --skill e2e-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/e2e-testing, .gemini/skills/e2e-testing, .github/skills/e2e-testing and .opencode/skills/e2e-testing in your project.

What does E2E Testing need to run?

Going by SKILL.md and its folder, E2E Testing needs the command-line tools its instructions call (npx) and credentials named OPENAI_API_KEY. Our summary lists: Python 3; Node.js; A credential in OPENAI_API_KEY.

Does E2E Testing access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is E2E Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does E2E Testing use?

E2E Testing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does E2E Testing use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.8k tokens, read only when the agent opens those files.

What are the alternatives to E2E Testing?

Skills that share tags, products or a category with E2E Testing: Kouchou AI Testing (digitaldemocracy2030/kouchou-ai, 171 stars), Dotnet Testing (novotnyllc/dotnet-artisan, 233 stars), Dotnet Testing (macalbert/envilder, 138 stars) and Supercheck Testing QA (supercheck-io/supercheck, 215 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains E2E Testing?

langflow-ai (a GitHub organization) maintains it in langflow-ai/langflow, which has 155,554 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.

Source: langflow-ai/langflow on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.