e2e-agent-browser
3
总安装量
3
周安装量
#59224
全站排名
安装命令
npx skills add https://github.com/jh941213/my-claude-code-asset --skill e2e-agent-browser
Agent 安装分布
opencode
3
gemini-cli
3
github-copilot
3
codex
3
kimi-cli
3
amp
3
Skill 文档
E2E Testing with agent-browser
AI ìì´ì í¸ë¥¼ ìí í¤ëë¦¬ì¤ ë¸ë¼ì°ì ìëí CLI agent-browser를 íì©íì¬ E2E í
ì¤í¸ë¥¼ ìì±íê³ ì¤ííë ì¢
í© ê°ì´ëì
ëë¤.
ì´ ì¤í¬ì ì¬ì©í ë
- ì¹ ì í리ì¼ì´ì E2E í ì¤í¸ ìì±
- ë¡ê·¸ì¸/íìê°ì íë¡ì° í ì¤í¸
- í¼ ì ë ¥ ë° ì ì¶ í ì¤í¸
- ë¤ë¹ê²ì´ì ë° ë¼ì°í í ì¤í¸
- UI ìí¸ìì© í ì¤í¸ (í´ë¦, í¸ë², ì¤í¬ë¡¤)
- ìê°ì ìí íì¸ (ìì ì¡´ì¬, í ì¤í¸ ë´ì©)
- CI/CD íì´íë¼ì¸ìì ë¸ë¼ì°ì í ì¤í¸ ì¤í
ì¤ì¹
# npmì¼ë¡ ì¤ì¹ (ê¶ì¥)
npm install -g agent-browser
# Chromium ë¸ë¼ì°ì ë¤ì´ë¡ë
agent-browser setup
# Linuxì ê²½ì° ìì¤í
ìì¡´ì± ì¶ê° ì¤ì¹
agent-browser setup --with-deps
íµì¬ ê°ë
1. ì¤ë ì· + Ref ìí¬íë¡ì°
agent-browserì íµì¬ì **ì ê·¼ì± í¸ë¦¬(Accessibility Tree)**ì ref ìì¤í ì ëë¤.
# 1. íì´ì§ ì´ê¸°
agent-browser open https://example.com
# 2. ì ê·¼ì± ì¤ë
ì· ê°ì ¸ì¤ê¸° (ref í¬í¨)
agent-browser snapshot -i
# ì¶ë ¥:
# - heading "Example Domain" [ref=e1] [level=1]
# - button "Submit" [ref=e2]
# - textbox "Email" [ref=e3]
# - link "Learn more" [ref=e4]
# 3. ref를 ì¬ì©íì¬ ììì ìí¸ìì©
agent-browser click @e2 # ë²í¼ í´ë¦
agent-browser fill @e3 "test@example.com" # í
ì¤í¸ ì
ë ¥
agent-browser text @e1 # í
ì¤í¸ ê°ì ¸ì¤ê¸°
2. ì¤ë ì· ìµì
# ì ì²´ ì ê·¼ì± í¸ë¦¬
agent-browser snapshot
# ì¸í°ëí°ë¸ ììë§ (ë²í¼, ì
ë ¥, ë§í¬)
agent-browser snapshot -i
# ì»´í©í¸ 모ë (ë¹ êµ¬ì¡° ìì ì ê±°)
agent-browser snapshot -c
# ê¹ì´ ì í
agent-browser snapshot -d 3
# CSS ì íìë¡ ë²ì ì í
agent-browser snapshot -s "#main"
# ìµì
ì¡°í©
agent-browser snapshot -i -c -d 5
3. JSON 모ë (AI ìì´ì í¸ì©)
# JSON ì¶ë ¥ì¼ë¡ íì± ê°ë¥í ê²°ê³¼ ë°í
agent-browser snapshot --json
# {"success":true,"data":{"snapshot":"...","refs":{"e1":{"role":"heading","name":"Title"},...}}}
E2E í ì¤í¸ í¨í´
í¨í´ 1: 기본 íì´ì§ í ì¤í¸
#!/bin/bash
# test_homepage.sh
set -e # ìë¬ ì ì¦ì ì¤ë¨
# íì´ì§ ì´ê¸°
agent-browser open https://myapp.com
# íì´ì§ íì´í íì¸
TITLE=$(agent-browser title)
if [[ "$TITLE" != "My App" ]]; then
echo "FAIL: Expected title 'My App', got '$TITLE'"
exit 1
fi
# 주ì ìì ì¡´ì¬ íì¸
agent-browser snapshot -i | grep -q "button.*Login" || {
echo "FAIL: Login button not found"
exit 1
}
echo "PASS: Homepage test"
agent-browser close
í¨í´ 2: ë¡ê·¸ì¸ íë¡ì° í ì¤í¸
#!/bin/bash
# test_login.sh
set -e
# ë¡ê·¸ì¸ íì´ì§ ì´ê¸°
agent-browser open https://myapp.com/login
# ì¤ë
ì·ì¼ë¡ ìì ref íì¸
agent-browser snapshot -i
# - textbox "Email" [ref=e1]
# - textbox "Password" [ref=e2]
# - button "Sign In" [ref=e3]
# ì´ë©ì¼ ì
ë ¥
agent-browser fill @e1 "test@example.com"
# ë¹ë°ë²í¸ ì
ë ¥
agent-browser fill @e2 "password123"
# ë¡ê·¸ì¸ ë²í¼ í´ë¦
agent-browser click @e3
# URL ë³ê²½ ë기
agent-browser wait url "**/dashboard"
# ëìë³´ë íì¸
URL=$(agent-browser url)
if [[ "$URL" != *"dashboard"* ]]; then
echo "FAIL: Not redirected to dashboard"
exit 1
fi
echo "PASS: Login flow"
agent-browser close
í¨í´ 3: í¼ ì ë ¥ ë° ì í¨ì± ê²ì¬ í ì¤í¸
#!/bin/bash
# test_form_validation.sh
set -e
agent-browser open https://myapp.com/register
# ì¤ë
ì·ì¼ë¡ í¼ ìì íì¸
agent-browser snapshot -i
# ë¹ í¼ ì ì¶ ìë
agent-browser click @submit-btn
# ìë¬ ë©ìì§ ë기
agent-browser wait text "Email is required"
# ìë¬ ë©ìì§ íì¸
agent-browser snapshot -i | grep -q "Email is required" || {
echo "FAIL: Validation error not shown"
exit 1
}
# ì í¨í ì´ë©ì¼ ì
ë ¥
agent-browser fill @email "valid@example.com"
# ì´ë©ì¼ ìë¬ ë©ìì§ ì¬ë¼ì§ íì¸
agent-browser snapshot -i | grep -q "Email is required" && {
echo "FAIL: Email error should be gone"
exit 1
}
echo "PASS: Form validation"
agent-browser close
í¨í´ 4: ë¤ë¹ê²ì´ì í ì¤í¸
#!/bin/bash
# test_navigation.sh
set -e
agent-browser open https://myapp.com
# ë¤ë¹ê²ì´ì
ë©ë´ í´ë¦
agent-browser click role:link "About"
agent-browser wait url "**/about"
# ë¤ë¡ ê°ê¸°
agent-browser back
agent-browser wait url "**/home"
# ìì¼ë¡ ê°ê¸°
agent-browser forward
agent-browser wait url "**/about"
echo "PASS: Navigation test"
agent-browser close
í¨í´ 5: 모ë¬/ë¤ì´ì¼ë¡ê·¸ í ì¤í¸
#!/bin/bash
# test_modal.sh
set -e
agent-browser open https://myapp.com
# ëª¨ë¬ í¸ë¦¬ê±° ë²í¼ í´ë¦
agent-browser click @open-modal-btn
# ëª¨ë¬ ëíë ëê¹ì§ ë기
agent-browser wait @modal-dialog
# ëª¨ë¬ ë´ì© íì¸
agent-browser snapshot -s "[role=dialog]" -i
# ëª¨ë¬ ë«ê¸°
agent-browser click @close-modal-btn
# ëª¨ë¬ ì¬ë¼ì§ íì¸ (isvisible ì¬ì©)
VISIBLE=$(agent-browser isvisible @modal-dialog 2>/dev/null || echo "false")
if [[ "$VISIBLE" == "true" ]]; then
echo "FAIL: Modal should be closed"
exit 1
fi
echo "PASS: Modal test"
agent-browser close
í¨í´ 6: ëëê·¸ ì¤ ëë¡ í ì¤í¸
#!/bin/bash
# test_dnd.sh
set -e
agent-browser open https://myapp.com/kanban
# ëëê·¸ ì¤ ëë¡ ì¤í
agent-browser drag @task-1 @column-done
# ê²°ê³¼ íì¸
agent-browser snapshot -s "#column-done" | grep -q "Task 1" || {
echo "FAIL: Task not moved"
exit 1
}
echo "PASS: Drag and drop test"
agent-browser close
í¨í´ 7: íì¼ ì ë¡ë í ì¤í¸
#!/bin/bash
# test_upload.sh
set -e
agent-browser open https://myapp.com/upload
# íì¼ ì
ë¡ë
agent-browser upload @file-input "./test-file.pdf"
# ì
ë¡ë ìë£ ë기
agent-browser wait text "Upload complete"
echo "PASS: File upload test"
agent-browser close
ê³ ê¸ ê¸°ë¥
ì¸ì¦ ì¸ì ì ì§
# íë¡í ëë í ë¦¬ë¡ ë¡ê·¸ì¸ ìí ì ì§
agent-browser open https://myapp.com --profile ~/.browser-profile/myapp
# íê²½ ë³ìë¡ ì¤ì
export AGENT_BROWSER_PROFILE=~/.browser-profile/myapp
agent-browser open https://myapp.com
ì¸ì ë¶ë¦¬
# ë
립ë ì¸ì
ì¼ë¡ ë³ë ¬ í
ì¤í¸
AGENT_BROWSER_SESSION=test1 agent-browser open https://myapp.com &
AGENT_BROWSER_SESSION=test2 agent-browser open https://myapp.com &
wait
# ì¸ì
ëª©ë¡ íì¸
agent-browser sessions
ë¤í¸ìí¬ ì¸í°ì í¸
# í¹ì ìì² ì°¨ë¨
agent-browser block "*.png"
agent-browser block "*analytics*"
# API ìëµ ëª¨í¹
agent-browser mock "/api/users" '{"users": [{"id": 1, "name": "Test"}]}'
# ë¤í¸ìí¬ ìì² ëª¨ëí°ë§
agent-browser requests
ì¤í¬ë¦°ì· ë° PDF
# íì¬ íë©´ ì¤í¬ë¦°ì·
agent-browser screenshot ./screenshot.png
# ì ì²´ íì´ì§ ì¤í¬ë¦°ì·
agent-browser screenshot ./full.png --full
# PDFë¡ ì ì¥
agent-browser pdf ./page.pdf
JavaScript ì¤í
# JS ì½ë ì¤í
agent-browser eval "document.title"
agent-browser eval "window.localStorage.getItem('token')"
# ë³µì¡í ì¤í¬ë¦½í¸
agent-browser eval "
const items = document.querySelectorAll('.item');
return items.length;
"
í ì¤í¸ ë¬ë ì¤í¬ë¦½í¸
Node.js í ì¤í¸ ë¬ë
// e2e/runner.js
const { execSync } = require('child_process');
const tests = [
'test_homepage.sh',
'test_login.sh',
'test_form_validation.sh',
'test_navigation.sh',
];
let passed = 0;
let failed = 0;
for (const test of tests) {
console.log(`Running ${test}...`);
try {
execSync(`bash e2e/${test}`, { stdio: 'inherit' });
passed++;
} catch (error) {
failed++;
console.error(`FAILED: ${test}`);
}
}
console.log(`\nResults: ${passed} passed, ${failed} failed`);
process.exit(failed > 0 ? 1 : 0);
npm ì¤í¬ë¦½í¸
{
"scripts": {
"test:e2e": "node e2e/runner.js",
"test:e2e:headed": "AGENT_BROWSER_HEADED=1 npm run test:e2e"
}
}
CI/CD íµí©
GitHub Actions
# .github/workflows/e2e.yml
name: E2E Tests
on: [push, pull_request]
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Install agent-browser
run: |
npm install -g agent-browser
agent-browser setup --with-deps
- name: Start app
run: |
npm run build
npm run start &
sleep 5
- name: Run E2E tests
run: npm run test:e2e
- name: Upload screenshots on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-screenshots
path: e2e/screenshots/
í´ë¼ì°ë ë¸ë¼ì°ì ì¬ì© (Browserbase)
# .github/workflows/e2e-cloud.yml
jobs:
e2e:
runs-on: ubuntu-latest
env:
AGENT_BROWSER_PROVIDER: browserbase
BROWSERBASE_API_KEY: ${{ secrets.BROWSERBASE_API_KEY }}
BROWSERBASE_PROJECT_ID: ${{ secrets.BROWSERBASE_PROJECT_ID }}
steps:
- uses: actions/checkout@v4
- run: npm run test:e2e
ëë²ê¹
headed 모ë
# ë¸ë¼ì°ì ì°½ íì
agent-browser open https://myapp.com --headed
ìì íì´ë¼ì´í¸
# ìì ê°ì¡° íì
agent-browser highlight @button
ì½ì ë¡ê·¸ íì¸
# ë¸ë¼ì°ì ì½ì ë¡ê·¸ 보기
agent-browser console
# ìë¬ ë¡ê·¸ë§
agent-browser console --error
í¸ë ì´ì¤ ë ¹í
# í¸ë ì´ì¤ ìì
agent-browser trace start
# í
ì¤í¸ ì¤í
agent-browser open https://myapp.com
agent-browser click @button
# ...
# í¸ë ì´ì¤ ì ì¥
agent-browser trace stop ./trace.zip
ì ë í° ê°ì´ë
Ref ê¸°ë° (ê¶ì¥)
# ì¤ë
ì·ìì ì»ì ref ì¬ì©
agent-browser click @e1
agent-browser fill @e2 "text"
CSS ì ë í°
agent-browser click "#submit-btn"
agent-browser fill ".email-input" "test@example.com"
agent-browser click "div > button.primary"
ìë§¨í± ë¡ì¼ì´í°
# Role 기ë°
agent-browser click role:button "Submit"
agent-browser fill role:textbox "Email" "test@example.com"
# í
ì¤í¸ 기ë°
agent-browser click text:label "Remember me"
agent-browser click text: "Sign Up"
# data-testid 기ë°
agent-browser click testid:submit-form
ë기 ì ëµ
# ìì ë기
agent-browser wait @element
# í
ì¤í¸ ë기
agent-browser wait text "Success"
# URL í¨í´ ë기
agent-browser wait url "**/dashboard"
# ìê° ë기 (ms)
agent-browser wait 2000
# ë¡ë ìí ë기
agent-browser wait load # load ì´ë²¤í¸
agent-browser wait domcontentloaded
agent-browser wait networkidle # ë¤í¸ìí¬ ìì í
# JS ì¡°ê±´ ë기
agent-browser wait js "window.appReady === true"
ëª¨ë² ì¬ë¡
1. ì¤ë ì· ì°ì ì ê·¼
# íì ì¤ë
ì·ì¼ë¡ íì¬ ìí íì
agent-browser snapshot -i
# ê·¸ ë¤ì refë¡ ìí¸ìì©
agent-browser click @e1
2. ìì ì ì¸ ë기
# íëì½ë©ë sleep ëì ì¡°ê±´ ë기 ì¬ì©
# BAD: agent-browser wait 5000
# GOOD:
agent-browser wait @loading-spinner
agent-browser wait text "Data loaded"
3. ìë¬ í¸ë¤ë§
#!/bin/bash
cleanup() {
agent-browser close 2>/dev/null || true
}
trap cleanup EXIT
set -e
# í
ì¤í¸ ì½ë...
4. íê²½ë³ ì¤ì
# .env.test
AGENT_BROWSER_PROFILE=~/.browser-test
AGENT_BROWSER_HEADED=0
BASE_URL=http://localhost:3000
5. í ì¤í¸ 격리
# ê° í
ì¤í¸ ì ì¿ í¤/ì¤í ë¦¬ì§ ì´ê¸°í
agent-browser cookies clear
agent-browser local clear
agent-browser session clear
ì ì©í ëª ë ¹ì´ ìì½
| ëª ë ¹ì´ | ì¤ëª |
|---|---|
agent-browser open <url> |
íì´ì§ ì´ê¸° |
agent-browser snapshot -i |
ì¸í°ëí°ë¸ ìì ì¤ë ì· |
agent-browser click @ref |
í´ë¦ |
agent-browser fill @ref "text" |
í ì¤í¸ ì ë ¥ |
agent-browser text @ref |
í ì¤í¸ ê°ì ¸ì¤ê¸° |
agent-browser wait text "msg" |
í ì¤í¸ ë기 |
agent-browser wait url "**/path" |
URL ë기 |
agent-browser screenshot ./ss.png |
ì¤í¬ë¦°ì· |
agent-browser isvisible @ref |
ê°ìì± íì¸ |
agent-browser close |
ë¸ë¼ì°ì ë«ê¸° |
리ìì¤
- agent-browser 문ì: https://agent-browser.dev
- GitHub: https://github.com/vercel-labs/agent-browser
- Playwright (ë´ë¶ ì¬ì©): https://playwright.dev