Web Application Testing
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
Playwright E2E 测试用例管理规范。定义文件命名(模块本地 TC{NNN})、目录布局、TC ID 分配、文件隔离和子断言模式。创建、规划或审查 OpenSpec 变更中的 E2E 测试用例时使用。
$ npx skills add linaproai/linapro --skill lina-e2e -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install linaproai/linapro lina-e2e --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/linaproai/linapro.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/lina-e2e .claude/skills/lina-e2e && rm -rf skills-srcUse ~/.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/
Install the "lina-e2e" agent skill from https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2e into .claude/skills/lina-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lina-e2e", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2eType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add linaproai/linapro --skill lina-e2e -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install linaproai/linapro lina-e2e --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linaproai/linapro.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/lina-e2e .agents/skills/lina-e2e && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "lina-e2e" agent skill from https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2e into .agents/skills/lina-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lina-e2e", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add linaproai/linapro --skill lina-e2e -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install linaproai/linapro lina-e2e --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linaproai/linapro.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/lina-e2e .cursor/skills/lina-e2e && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "lina-e2e" agent skill from https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2e into .cursor/skills/lina-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lina-e2e", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/linaproai/linapro.git --path .agents/skills/lina-e2e--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add linaproai/linapro --skill lina-e2e -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install linaproai/linapro lina-e2e --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linaproai/linapro.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/lina-e2e .gemini/skills/lina-e2e && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "lina-e2e" agent skill from https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2e into .gemini/skills/lina-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lina-e2e", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install linaproai/linapro lina-e2eInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add linaproai/linapro --skill lina-e2e -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/linaproai/linapro.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/lina-e2e .github/skills/lina-e2e && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "lina-e2e" agent skill from https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2e into .github/skills/lina-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lina-e2e", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add linaproai/linapro --skill lina-e2e -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install linaproai/linapro lina-e2e --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linaproai/linapro.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/lina-e2e .opencode/skills/lina-e2e && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "lina-e2e" agent skill from https://github.com/linaproai/linapro/tree/main/.agents/skills/lina-e2e into .opencode/skills/lina-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lina-e2e", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
lina-e2ePlaywright E2E 测试用例管理规范。定义文件命名(模块本地 TC{NNN})、目录布局、TC ID 分配、文件隔离和子断言模式。创建、规划或审查 OpenSpec 变更中的 E2E 测试用例时使用。
Lina E2E is an agent skill from linaproai/linapro. Playwright E2E 测试用例管理规范。定义文件命名(模块本地 TC{NNN})、目录布局、TC ID 分配、文件隔离和子断言模式。创建、规划或审查 OpenSpec 变更中的 E2E 测试用例时使用。
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: 依赖 Playwright。
It sits in Testing & QA, covering End-to-end testing. It works with Playwright. The repository describes itself as: AI-native full-stack framework engineered for sustainable delivery. The licence is Apache-2.0.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 75395c8. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npxpnpmplaywrightFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
依赖 Playwright。
From compatibility in the SKILL.md frontmatter.
Lina E2E loads about 1.9k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 256 words of instructions outside code blocks.
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.
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.
The full file from linaproai/linapro at commit 75395c8, republished under its Apache-2.0 licence (© linaproai). 256 words, ~1,892 tokens.
.claude/skills/lina-e2e/SKILL.md (or your agent's skills folder).本项目中 Playwright E2E 测试用例的组织、命名和编写标准。
交互语言:与用户交互的内容语言以用户上下文使用的语言为准,用户使用英文则使用英文,用户使用中文则使用中文。
规范来源:E2E 质量审查、截图验证、i18n 文案断言等执行要求的唯一事实来源为 .agents/rules/testing.md。本技能只负责用例组织、命名和目录布局,不重复维护质量审查和验证细则。创建或审查 E2E 用例时,必须读取并遵守 .agents/rules/testing.md 中的 E2E 质量审查要求和 E2E 截图验证要求。
hack/tests/
├── e2e/
│ ├── auth/ # 宿主模块:认证
│ │ ├── TC001-login-verification.ts
│ │ └── TC002-logout.ts
│ ├── admin/ # 宿主模块:管理功能
│ │ ├── TC001-spec-management.ts
│ │ └── TC002-user-management.ts
│ ├── notebook/ # 宿主模块:笔记本生命周期
│ │ ├── TC001-create-notebook.ts
│ │ ├── TC002-jupyterlab-access.ts
│ │ ├── TC003-training-execution.ts
│ │ ├── TC004-multi-image-notebook.ts
│ │ └── TC005-shared-directory.ts
│ └── {module}/ # 宿主新模块遵循相同模式
│ └── TC{NNN}-{brief-name}.ts
├── fixtures/
│ ├── auth.ts
│ ├── config.ts
│ └── k8s.ts
├── pages/ # 宿主/共享页面对象模型文件
│ ├── LoginPage.ts
│ ├── NotebookPage.ts
│ └── ...
└── playwright.config.ts源码插件的插件专属 E2E 必须闭环在插件自己的目录中:
apps/lina-plugins/<plugin-id>/
└── hack/tests/
├── e2e/
│ └── TC{NNN}-{brief-name}.ts
├── pages/
│ └── <PluginPageObject>.ts
└── support/
└── <plugin-helper>.ts关键规则:
hack/tests/e2e/{module}/。apps/lina-plugins/<plugin-id>/hack/tests/e2e/。hack/tests/e2e/extension/plugin/ 只用于宿主插件框架、动态插件运行时、源码插件生命周期这类宿主级插件能力测试;禁止把某个源码插件自身功能的 E2E 放到这里。每个测试文件必须遵循以下模式:
TC{NNN}-{brief-name}.ts| 组成部分 | 格式 | 示例 |
|---|---|---|
| 前缀 | TC | TC |
| ID | 3 位数字,补零 | 001、012、100 |
| 分隔符 | - | - |
| 简短名称 | kebab-case | login-verification |
| 扩展名 | .ts | .ts |
完整示例:
TC001-login-verification.tsTC014-bulk-delete-notebooks.ts规则:
test.describe 块)。TC ID 只在当前模块目录内唯一并连续递增。.spec.ts 后缀,使用普通的 .ts。添加新测试用例前:
find hack/tests/e2e/<module> -maxdepth 1 -type f -name 'TC*.ts' | sort
# 或源码插件:
find apps/lina-plugins/<plugin-id>/hack/tests/e2e/<module> -maxdepth 1 -type f -name 'TC*.ts' | sort示例: 如果当前模块目录内现有最大文件为 TC005-shared-directory.ts,则下一个测试用例为 TC006。
重要: TC ID 只在所属模块目录内维护,必须从 TC001 开始连续递增。不要因为其他模块或其他插件使用过更大的编号而跳号。
每个测试文件遵循以下结构:
宿主测试:
import { test, expect } from '../../fixtures/auth'
import { SomePage } from '../../pages/SomePage'
import { config } from '../../fixtures/config'
test.describe('TC-{N} {简短描述}', () => {
// 可选:共享设置
test.beforeEach(async ({ adminPage }) => {
// ...
})
test('TC-{N}a: {子断言描述}', async ({ page }) => {
// 单一聚焦断言
})
test('TC-{N}b: {子断言描述}', async ({ adminPage }) => {
// 另一个聚焦断言
})
test('TC-{N}c: {子断言描述}', async ({ adminPage }) => {
// ...
})
})源码插件测试:
import { test, expect } from '../../../../../../hack/tests/fixtures/auth'
import { SomePluginPage } from '../pages/SomePluginPage'
test.describe('TC-{N} {插件功能描述}', () => {
test('TC-{N}a: {子断言描述}', async ({ adminPage }) => {
// 插件专属流程断言
})
})文件内约定:
test.describe 标签使用 TC-{N}(不补零)后跟简短描述。TC-{N}{字母}: 作为前缀(如 TC-1a:、TC-1b:)。TC-{N}a~c:。每个测试文件必须可独立运行:
beforeEach、beforeAll、固件或内联设置自行完成。npx playwright test hack/tests/e2e/auth/TC001-login-verification.ts
pnpm -C hack/tests test:module -- plugin:<plugin-id>所有页面交互必须通过页面对象类进行:
import { Page, Locator } from '@playwright/test'
export class SomePage {
readonly page: Page
readonly someElement: Locator
constructor(page: Page) {
this.page = page
this.someElement = page.locator('[data-testid="some-element"]')
}
async goto() {
await this.page.goto('/some-path')
await this.page.waitForLoadState('networkidle')
}
async performAction() {
// 封装复杂交互
}
}规则:
hack/tests/pages/。apps/lina-plugins/<plugin-id>/hack/tests/pages/。hack/tests/pages/ 中;只有多个宿主测试或多个插件确实复用的通用能力,才提升到宿主共享 POM。data-testid 属性作为定位策略。共享的测试设置(认证、配置)放在 fixtures/ 目录中:
auth.ts — 扩展 Playwright test,提供已认证的页面固件(adminPage 等)config.ts — 环境相关配置(URL、凭据、超时时间)k8s.ts — Kubernetes 辅助工具(Pod 就绪检查、执行命令)使用固件而非直接导入 @playwright/test:
// 宿主测试
import { test, expect } from '../../fixtures/auth'
// 源码插件测试
import { test, expect } from '../../../../../../hack/tests/fixtures/auth'
// 错误
import { test, expect } from '@playwright/test'在 OpenSpec 变更中编写 tasks.md 时,E2E 测试任务必须引用 TC ID:
### 任务 3:E2E — TC006 笔记本自动保存
- [ ] 创建 `hack/tests/e2e/notebook/TC006-notebook-auto-save.ts`
- [ ] 实现 TC-6a:空闲超时后文件自动保存
- [ ] 实现 TC-6b:UI 中显示保存指示器
- [ ] 实现 TC-6c:页面重新加载后内容持久化源码插件示例:
### 任务 3:E2E — TC003 插件页面入口
- [ ] 创建 `apps/lina-plugins/example-plugin/hack/tests/e2e/TC003-example-plugin-entry.ts`
- [ ] 实现 TC-3a:插件公开接口可读取
- [ ] 实现 TC-3b:插件插槽内容可见
- [ ] 实现 TC-3c:插件管理页可访问任务标题中的 TC ID 必须与文件名匹配。子断言(TC-6a、TC-6b)应列为子项。
当执行 E2E 测试的代理支持多模态图片识别时,必须在关键交互步骤后捕获浏览器截图并审查截图内容。截图可以发现文本断言无法捕获的问题,包括 i18n key 未翻译、布局错乱、接口报错 toast 等。
截图规范和审查要求的完整定义在 .agents/rules/testing.md 的"E2E 截图验证要求"章节。本节仅列出 Playwright 截图调用约定:
// 在关键交互后捕获截图
await adminPage.screenshot({
path: `temp/${new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19)}-${description}.png`,
fullPage: false, // 只捕获视口,避免过大的截图
});截图文件命名格式:{YYYYMMDD}-{HHmmss}-{描述}.png,放置在项目根目录 temp/ 下。
| 项目 | 规范 |
|---|---|
| 文件名 | TC{NNN}-{brief-name}.ts |
| TC ID 范围 | 当前模块目录内唯一并连续递增 |
| 宿主测试目录 | hack/tests/e2e/{module}/ |
| 源码插件测试目录 | apps/lina-plugins/<plugin-id>/hack/tests/e2e/ |
| Describe 标签 | TC-{N} {描述} |
| 子测试标签 | TC-{N}{字母}: {描述} |
| 宿主导入 test/expect | 从相对路径 ../../fixtures/auth 导入 |
| 插件导入 test/expect | 从相对路径 ../../../../../../hack/tests/fixtures/auth 导入 |
| 页面交互 | 通过宿主 pages/ 或插件 hack/tests/pages/ 中的 POM 类 |
| 独立性 | 每个文件可独立运行 |
| ID 分配 | 扫描当前模块目录已用最大值 → 递增 1 |
| 截图验证 | 多模态可用时,关键交互后截图并审查;详见 .agents/rules/testing.md |
| 质量审查 | 详见 .agents/rules/testing.md 的 E2E 质量审查要求 |
© linaproai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/lina-e2e of linaproai/linapro.
Open the folder on GitHubat commit 75395c8
Lina E2E 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Lina E2E this skilllinaproai/linapro | 160 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| playwright-cli Browser Automationgithub/gh-aw | 5.4k | 24 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Write and Verify Playwright Testsappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 | |
| Cucumber and Playwright E2E Testslanggenius/dify | 158k | — | ~682 | Automated safety check: Pass | Custom licence | |
| E2E Testinglangflow-ai/langflow | 156k | — | ~3.3k | Automated safety check: Pass | MIT |
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
appsmithorg/appsmith
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
langgenius/dify
Guides changes and reviews of the Cucumber and Playwright end-to-end suite under `e2e/`: feature files, step definitions, support code, tags, locators and assertions.
langflow-ai/langflow
Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.
callstack/react-native-pager-view
Agentic end-to-end tests with e2e, the e2e runner. An agent skill from callstack/react-native-pager-view.
linaproai/linapro
通过 make db.init/mock 重置数据库、重启服务、安装并启用所有内置插件、准备压测数据,并启动并发子代理; 通常需要几十分钟到数小时,且会消耗大量 Token。不得从其他技能、CI、定时任务、 Git 钩子或模糊的性能请求中触发。
linaproai/linapro
Vben Admin 5.0 前端框架开发技能。用于开发基于 Vue3、Vite、TypeScript 的中后台管理系统。
linaproai/linapro
手动触发:为 LinaPro 主仓库及 apps/lina-plugins 子模块完成提交、PR 前 rebase、推送、创建 PR, 主仓 CI 修复回路,以及 PR 合并后恢复原始分支并同步 main。禁止自动触发。
linaproai/linapro
排查并修复给定的 LinaPro GitHub Actions 失败问题;修复完成后保留本地改动, 禁止自动提交、推送或创建 PR。
linaproai/linapro
审查 LinaPro 社区 GitHub Issues,并按项目规范和源码实现分类处理. An agent skill from linaproai/linapro.
linaproai/linapro
手动触发:将主仓库与 apps/lina-plugins 对齐最新 main 后, 按提示在两侧各建独立分支;分支就绪后继续处理提示词中的后续请求。
Works with
Categories
Playwright E2E 测试用例管理规范。定义文件命名(模块本地 TC{NNN})、目录布局、TC ID 分配、文件隔离和子断言模式。创建、规划或审查 OpenSpec 变更中的 E2E 测试用例时使用。. Lina E2E is an agent skill from linaproai/linapro.
Lina E2E fits situations like: tasks that involve End-to-end testing.
Run `npx skills add linaproai/linapro --skill lina-e2e -a claude-code`. Or copy the skill folder (.agents/skills/lina-e2e in linaproai/linapro) into .claude/skills/lina-e2e in your project. Claude Code loads it when a task matches its description.
Run `npx skills add linaproai/linapro --skill lina-e2e -a codex`. Or copy the skill folder (.agents/skills/lina-e2e in linaproai/linapro) into .agents/skills/lina-e2e in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add linaproai/linapro --skill lina-e2e -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lina-e2e, .gemini/skills/lina-e2e, .github/skills/lina-e2e and .opencode/skills/lina-e2e in your project.
Going by SKILL.md and its folder, Lina E2E needs the command-line tools its instructions call (npx, pnpm and playwright). Our summary lists: Node.js. Compatibility (from SKILL.md): 依赖 Playwright。.
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.
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.
Lina E2E is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Lina E2E: Web Application Testing (anthropics/skills, 180k stars), playwright-cli Browser Automation (github/gh-aw, 5.4k stars), Write and Verify Playwright Tests (appsmithorg/appsmith, 41k stars) and Cucumber and Playwright E2E Tests (langgenius/dify, 158k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
linaproai (a GitHub organization) maintains it in linaproai/linapro, which has 160 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on September 7, 2026.
Source: linaproai/linapro on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.