{"id":"ca321085-9a50-4e00-9866-19469d46e6ac","entityType":"agent","slug":"clawhub-zhanghengyi1986-afk-web-tester","name":"Web Tester","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zhanghengyi1986-afk-web-tester","canonicalPath":"/agent/clawhub-zhanghengyi1986-afk-web-tester","generatedAt":"2026-10-11T20:59:44.970Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T18:33:19.651Z","emptyReason":null},"description":"Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E... Skill: Web Tester Owner: zhanghengyi1986-afk Summary: Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E... Tags: latest:1.0.0 Version history: v1.0.0 | 2026-04-15T01:46:41.336Z | user Initial release: Playwright & Selenium E2E testing, UI automation, accessibility checks, screenshot comparison Archive index: Ar","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s173knyfg55hja2f40zjr9egvs84wkbp:web-tester","sourceUrl":"https://clawhub.ai/zhanghengyi1986-afk/web-tester","homepage":"https://clawhub.ai/zhanghengyi1986-afk/skills/web-tester","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zhanghengyi1986-afk/web-tester","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zhanghengyi1986-afk/skills/web-tester","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:33:19.651Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:33:19.651Z","emptyReason":null},"stars":null,"forks":null,"downloads":1009,"packageName":null,"latestVersion":"1.0.0","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:33:19.583Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T18:33:19.651Z","lastCrawledAt":"2026-10-11T18:33:19.583Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T18:33:19.583Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.0","createdAt":"2026-04-15T01:46:41.336Z","changelog":"Initial release: Playwright & Selenium E2E testing, UI automation, accessibility checks, screenshot comparison","fileCount":3,"zipByteSize":4986}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173knyfg55hja2f40zjr9egvs84wkbp:web-tester","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T20:59:44.970Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhanghengyi1986-afk-web-tester/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T18:33:19.651Z","emptyReason":null},"readme":"Skill: Web Tester\n\nOwner: zhanghengyi1986-afk\n\nSummary: Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E...\n\nTags: latest:1.0.0\n\nVersion history:\n\nv1.0.0 | 2026-04-15T01:46:41.336Z | user\n\nInitial release: Playwright & Selenium E2E testing, UI automation, accessibility checks, screenshot comparison\n\nArchive index:\n\nArchive v1.0.0: 3 files, 4986 bytes\n\nFiles: skill-card.md (2017b), SKILL.md (8012b), _meta.json (129b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: web-tester\ndescription: >\n  Web UI testing and browser automation using Playwright or Selenium.\n  Navigate pages, interact with elements, take screenshots, validate UI state,\n  generate E2E test scripts. Requires Node.js and npx for Playwright.\n  Use when: (1) UI functional testing, (2) E2E test scripting, (3) screenshot\n  comparison, (4) form testing, (5) cross-browser testing, (6) accessibility checks,\n  (7) \"UI测试\", \"页面测试\", \"自动化测试\", \"截图对比\", \"E2E测试\", \"浏览器自动化\",\n  \"Playwright\", \"Selenium\".\n  NOT for: API testing (use api-tester), mobile app testing, or performance/load testing.\nmetadata:\n  openclaw:\n    emoji: \"🌐\"\n    requires:\n      bins: [node]\n---\n\n# Web Tester\n\nBrowser-based UI testing and E2E automation.\n\n## When to Use\n\n✅ **USE this skill when:**\n- Testing web page functionality (click, fill, navigate)\n- Writing E2E test scripts (Playwright/Selenium)\n- Taking screenshots for visual regression\n- Validating page content, forms, navigation\n- Accessibility testing\n- \"帮我测试这个页面\" / \"写个E2E自动化脚本\"\n\n❌ **DON'T use this skill when:**\n- API testing → use `api-tester`\n- Mobile app testing → use dedicated mobile tools\n- Load/stress testing → use k6/JMeter/locust\n\n## Quick Start: Playwright\n\n### One-shot Page Test\n\n```bash\n# Navigate and screenshot\nnpx -y playwright@latest test --browser=chromium -g \"test name\"\n\n# Or write inline script\nnode -e \"\nconst { chromium } = require('playwright');\n(async () => {\n  const browser = await chromium.launch({ headless: true });\n  const page = await browser.newPage();\n  await page.goto('https://example.com');\n  console.log('Title:', await page.title());\n  await page.screenshot({ path: '/tmp/screenshot.png' });\n  await browser.close();\n})();\n\"\n```\n\n### Generate Playwright Test Script\n\nWhen user provides a page URL and test scenario, generate:\n\n```javascript\n// tests/example.spec.js\nconst { test, expect } = require('@playwright/test');\n\ntest.describe('Login Page Tests', () => {\n\n  test('TC001: Successful login', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n\n    // Fill form\n    await page.fill('input[name=\"username\"]', 'admin');\n    await page.fill('input[name=\"password\"]', 'Admin@123');\n    await page.click('button[type=\"submit\"]');\n\n    // Verify redirect\n    await expect(page).toHaveURL(/dashboard/);\n    await expect(page.locator('h1')).toContainText('Welcome');\n  });\n\n  test('TC002: Login with empty fields', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n    await page.click('button[type=\"submit\"]');\n\n    // Verify validation messages\n    await expect(page.locator('.error-message')).toBeVisible();\n  });\n\n  test('TC003: Login with wrong password', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n    await page.fill('input[name=\"username\"]', 'admin');\n    await page.fill('input[name=\"password\"]', 'wrongpass');\n    await page.click('button[type=\"submit\"]');\n\n    await expect(page.locator('.error-alert')).toContainText('Invalid');\n  });\n});\n```\n\nRun tests:\n\n```bash\n# Install Playwright browsers (first time)\nnpx playwright install chromium\n\n# Run tests\nnpx playwright test tests/example.spec.js --reporter=list\n\n# Run with headed browser (visible)\nnpx playwright test --headed\n\n# Run specific test\nnpx playwright test -g \"TC001\"\n\n# Generate HTML report\nnpx playwright test --reporter=html\nnpx playwright show-report\n```\n\n## Common UI Test Patterns\n\n### Element Locator Strategies (priority order)\n\n1. `data-testid` attribute (most stable)\n2. `role` + accessible name\n3. `placeholder` / `label` text\n4. CSS selector\n5. XPath (last resort)\n\n```javascript\n// Preferred\npage.getByTestId('submit-btn')\npage.getByRole('button', { name: 'Submit' })\npage.getByPlaceholder('Enter email')\npage.getByLabel('Username')\n\n// Fallback\npage.locator('button.submit-btn')\npage.locator('//button[contains(text(),\"Submit\")]')\n```\n\n### Wait Strategies\n\n```javascript\n// Wait for element\nawait page.waitForSelector('.result-list');\n\n// Wait for navigation\nawait page.waitForURL('**/dashboard');\n\n// Wait for network idle\nawait page.waitForLoadState('networkidle');\n\n// Wait for specific response\nconst response = await page.waitForResponse('**/api/users');\n```\n\n### Screenshot & Visual Comparison\n\n```javascript\n// Full page screenshot\nawait page.screenshot({ path: 'full-page.png', fullPage: true });\n\n// Element screenshot\nawait page.locator('.chart').screenshot({ path: 'chart.png' });\n\n// Visual comparison (Playwright built-in)\nawait expect(page).toHaveScreenshot('homepage.png');\n```\n\n## Test Scenarios Checklist\n\nFor any web page, consider testing:\n\n| Category | Test Points |\n|----------|-------------|\n| **Navigation** | Links work, breadcrumbs correct, back button, deep links |\n| **Forms** | Required fields, validation messages, submit, reset |\n| **Auth** | Login, logout, session expiry, role-based access |\n| **Responsive** | Mobile viewport, tablet, desktop breakpoints |\n| **Accessibility** | Tab order, screen reader, color contrast, ARIA |\n| **Error States** | 404 page, network error, empty state, timeout |\n| **Data Display** | Pagination, sorting, filtering, search |\n| **File Operations** | Upload, download, preview |\n\n## Accessibility Quick Check\n\n```javascript\n// Install axe-core for a11y testing\n// npm install @axe-core/playwright\n\nconst { test, expect } = require('@playwright/test');\nconst AxeBuilder = require('@axe-core/playwright').default;\n\ntest('accessibility scan', async ({ page }) => {\n  await page.goto('https://example.com');\n  const results = await new AxeBuilder({ page }).analyze();\n  expect(results.violations).toEqual([]);\n});\n```\n\n## Tips\n\n- Always use `headless: true` in CI environments\n- Set reasonable timeouts (default 30s is often too long)\n- Use `page.waitForLoadState('networkidle')` before assertions\n- For flaky tests: add retries in config, not in test code\n- Screenshot on failure is invaluable for debugging\n\n## Selenium (Python) Reference\n\nWhen Playwright is not available or user prefers Selenium:\n\n```python\n\"\"\"Selenium E2E Test Example\"\"\"\nimport pytest\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nfrom selenium.webdriver.chrome.options import Options\n\n@pytest.fixture\ndef driver():\n    opts = Options()\n    opts.add_argument('--headless')\n    opts.add_argument('--no-sandbox')\n    opts.add_argument('--disable-dev-shm-usage')\n    d = webdriver.Chrome(options=opts)\n    d.implicitly_wait(10)\n    yield d\n    d.quit()\n\nclass TestLogin:\n    def test_successful_login(self, driver):\n        driver.get('https://app.example.com/login')\n        driver.find_element(By.NAME, 'username').send_keys('admin')\n        driver.find_element(By.NAME, 'password').send_keys('Admin@123')\n        driver.find_element(By.CSS_SELECTOR, 'button[type=submit]').click()\n\n        WebDriverWait(driver, 10).until(\n            EC.url_contains('/dashboard')\n        )\n        assert 'dashboard' in driver.current_url\n\n    def test_screenshot_on_failure(self, driver):\n        driver.get('https://app.example.com/broken-page')\n        driver.save_screenshot('/tmp/failure.png')\n```\n\nInstall: `pip install selenium webdriver-manager`\n\n### Playwright vs Selenium — When to Choose\n\n| 维度 | Playwright | Selenium |\n|------|-----------|----------|\n| 安装 | `npx playwright install` 一键搞定 | 需要 WebDriver + 浏览器匹配 |\n| 速度 | 更快（原生 CDP/WebSocket） | 较慢（HTTP 协议通信） |\n| 自动等待 | 内置智能等待 | 需手动写 WebDriverWait |\n| 多浏览器 | Chromium/Firefox/WebKit | Chrome/Firefox/Edge/Safari |\n| 语言 | JS/TS/Python/Java/.NET | Python/Java/C#/Ruby/JS |\n| 适合 | 新项目、快速验证、CI | 已有 Selenium 框架的团队 |\n\n**建议**: 新项目优先 Playwright，已有 Selenium 资产的项目继续用 Selenium。\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7cthwpc25rg13j7q18dst98n84w5m9\",\n  \"slug\": \"web-tester\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776217601336\n}\n\nFile v1.0.0:skill-card.md\n\n## Description:\n\nWeb Tester supports browser-based UI testing and automation with Playwright or Selenium, including page navigation, element interaction, screenshots, UI-state validation, and E2E test generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhanghengyi1986-afk](https://clawhub.ai/user/zhanghengyi1986-afk)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and QA engineers use this skill to create and run browser-based UI checks, generate Playwright or Selenium E2E tests, capture screenshots, and validate forms, navigation, accessibility, and cross-browser behavior.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Browser automation and package-install examples can affect live sites or local environments if run without controls.\n\nMitigation: Use staging URLs and test accounts by default, and run Playwright or Selenium dependencies from a lockfile-managed project.\n\nRisk: Screenshots and generated reports may contain sensitive page content.\n\nMitigation: Treat screenshots and reports as sensitive artifacts and avoid committing or storing them in shared locations unnecessarily.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zhanghengyi1986-afk/skills/web-tester)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown with JavaScript, Python, and bash code blocks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce test scripts, command examples, screenshot paths, and report-generation guidance for execution in the user's controlled test environment.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: Web Tester Owner: zhanghengyi1986-afk Summary: Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E... Tags: latest:1.0.0 Version history: v1.0.0 | 2026-04-15T01:46:41.336Z | user Initial release: Playwright & Selenium E2E testing, UI automation, accessibility checks, screenshot comparison Archive index: Ar","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Navigate and screenshot\nnpx -y playwright@latest test --browser=chromium -g \"test name\"\n\n# Or write inline script\nnode -e \"\nconst { chromium } = require('playwright');\n(async () => {\n  const browser = await chromium.launch({ headless: true });\n  const page = await browser.newPage();\n  await page.goto('https://example.com');\n  console.log('Title:', await page.title());\n  await page.screenshot({ path: '/tmp/screenshot.png' });\n  await browser.close();\n})();\n\""},{"language":"javascript","snippet":"// tests/example.spec.js\nconst { test, expect } = require('@playwright/test');\n\ntest.describe('Login Page Tests', () => {\n\n  test('TC001: Successful login', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n\n    // Fill form\n    await page.fill('input[name=\"username\"]', 'admin');\n    await page.fill('input[name=\"password\"]', 'Admin@123');\n    await page.click('button[type=\"submit\"]');\n\n    // Verify redirect\n    await expect(page).toHaveURL(/dashboard/);\n    await expect(page.locator('h1')).toContainText('Welcome');\n  });\n\n  test('TC002: Login with empty fields', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n    await page.click('button[type=\"submit\"]');\n\n    // Verify validation messages\n    await expect(page.locator('.error-message')).toBeVisible();\n  });\n\n  test('TC003: Login with wrong password', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n    await page.fill('input[name=\"username\"]', 'admin');\n    await page.fill('input[name=\"password\"]', 'wrongpass');\n    await page.click('button[type=\"submit\"]');\n\n    await expect(page.locator('.error-alert')).toContainText('Invalid');\n  });\n});"},{"language":"bash","snippet":"# Install Playwright browsers (first time)\nnpx playwright install chromium\n\n# Run tests\nnpx playwright test tests/example.spec.js --reporter=list\n\n# Run with headed browser (visible)\nnpx playwright test --headed\n\n# Run specific test\nnpx playwright test -g \"TC001\"\n\n# Generate HTML report\nnpx playwright test --reporter=html\nnpx playwright show-report"},{"language":"javascript","snippet":"// Preferred\npage.getByTestId('submit-btn')\npage.getByRole('button', { name: 'Submit' })\npage.getByPlaceholder('Enter email')\npage.getByLabel('Username')\n\n// Fallback\npage.locator('button.submit-btn')\npage.locator('//button[contains(text(),\"Submit\")]')"},{"language":"javascript","snippet":"// Wait for element\nawait page.waitForSelector('.result-list');\n\n// Wait for navigation\nawait page.waitForURL('**/dashboard');\n\n// Wait for network idle\nawait page.waitForLoadState('networkidle');\n\n// Wait for specific response\nconst response = await page.waitForResponse('**/api/users');"},{"language":"javascript","snippet":"// Full page screenshot\nawait page.screenshot({ path: 'full-page.png', fullPage: true });\n\n// Element screenshot\nawait page.locator('.chart').screenshot({ path: 'chart.png' });\n\n// Visual comparison (Playwright built-in)\nawait expect(page).toHaveScreenshot('homepage.png');"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: web-tester\ndescription: >\n  Web UI testing and browser automation using Playwright or Selenium.\n  Navigate pages, interact with elements, take screenshots, validate UI state,\n  generate E2E test scripts. Requires Node.js and npx for Playwright.\n  Use when: (1) UI functional testing, (2) E2E test scripting, (3) screenshot\n  comparison, (4) form testing, (5) cross-browser testing, (6) accessibility checks,\n  (7) \"UI测试\", \"页面测试\", \"自动化测试\", \"截图对比\", \"E2E测试\", \"浏览器自动化\",\n  \"Playwright\", \"Selenium\".\n  NOT for: API testing (use api-tester), mobile app testing, or performance/load testing.\nmetadata:\n  openclaw:\n    emoji: \"🌐\"\n    requires:\n      bins: [node]\n---\n\n# Web Tester\n\nBrowser-based UI testing and E2E automation.\n\n## When to Use\n\n✅ **USE this skill when:**\n- Testing web page functionality (click, fill, navigate)\n- Writing E2E test scripts (Playwright/Selenium)\n- Taking screenshots for visual regression\n- Validating page content, forms, navigation\n- Accessibility testing\n- \"帮我测试这个页面\" / \"写个E2E自动化脚本\"\n\n❌ **DON'T use this skill when:**\n- API testing → use `api-tester`\n- Mobile app testing → use dedicated mobile tools\n- Load/stress testing → use k6/JMeter/locust\n\n## Quick Start: Playwright\n\n### One-shot Page Test\n\n```bash\n# Navigate and screenshot\nnpx -y playwright@latest test --browser=chromium -g \"test name\"\n\n# Or write inline script\nnode -e \"\nconst { chromium } = require('playwright');\n(async () => {\n  const browser = await chromium.launch({ headless: true });\n  const page = await browser.newPage();\n  await page.goto('https://example.com');\n  console.log('Title:', await page.title());\n  await page.screenshot({ path: '/tmp/screenshot.png' });\n  await browser.close();\n})();\n\"\n```\n\n### Generate Playwright Test Script\n\nWhen user provides a page URL and test scenario, generate:\n\n```javascript\n// tests/example.spec.js\nconst { test, expect } = require('@playwright/test');\n\ntest.describe('Login Page Tests', () => {\n\n  test('TC001: Successful login', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n\n    // Fill form\n    await page.fill('input[name=\"username\"]', 'admin');\n    await page.fill('input[name=\"password\"]', 'Admin@123');\n    await page.click('button[type=\"submit\"]');\n\n    // Verify redirect\n    await expect(page).toHaveURL(/dashboard/);\n    await expect(page.locator('h1')).toContainText('Welcome');\n  });\n\n  test('TC002: Login with empty fields', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n    await page.click('button[type=\"submit\"]');\n\n    // Verify validation messages\n    await expect(page.locator('.error-message')).toBeVisible();\n  });\n\n  test('TC003: Login with wrong password', async ({ page }) => {\n    await page.goto('https://app.example.com/login');\n    await page.fill('input[name=\"username\"]', 'admin');\n    await page.fill('input[name=\"password\"]', 'wrongpass');\n    await page.click('button[type=\"submit\"]');\n\n    await expect(page.locator('.error-alert')).toContainText('Invalid'"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cthwpc25rg13j7q18dst98n84w5m9\",\n  \"slug\": \"web-tester\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776217601336\n}"},{"path":"skill-card.md","content":"## Description:\n\nWeb Tester supports browser-based UI testing and automation with Playwright or Selenium, including page navigation, element interaction, screenshots, UI-state validation, and E2E test generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhanghengyi1986-afk](https://clawhub.ai/user/zhanghengyi1986-afk)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and QA engineers use this skill to create and run browser-based UI checks, generate Playwright or Selenium E2E tests, capture screenshots, and validate forms, navigation, accessibility, and cross-browser behavior.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Browser automation and package-install examples can affect live sites or local environments if run without controls.\n\nMitigation: Use staging URLs and test accounts by default, and run Playwright or Selenium dependencies from a lockfile-managed project.\n\nRisk: Screenshots and generated reports may contain sensitive page content.\n\nMitigation: Treat screenshots and reports as sensitive artifacts and avoid committing or storing them in shared locations unnecessarily.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zhanghengyi1986-afk/skills/web-tester)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown with JavaScript, Python, and bash code blocks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce test scripts, command examples, screenshot paths, and report-generation guidance for execution in the user's controlled test environment.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E... Skill: Web Tester Owner: zhanghengyi1986-afk Summary: Web UI testing and browser automation using Playwright or Selenium. Navigate pages, interact with elements, take screenshots, validate UI state, generate E2E... Tags: latest:1.0.0 Version history: v1.0.0 | 2026-04-15T01:46:41.336Z | user Initial release: Playwright & Selenium E2E testing, UI automation, accessibility checks, screenshot comparison Archive index: Ar","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":953,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:33:19.651Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:33:19.651Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:59:44.970Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}