| name | e2e-agent-browser |
| description | agent-browser CLI를 활용한 E2E 테스트 자동화. 스냅샷 기반 접근성 트리와 ref 시스템으로 안정적인 브라우저 테스트를 수행합니다. "E2E", "브라우저 테스트", "agent-browser" 키워드에 활성화. |
E2E Testing with agent-browser
AI 에이전트를 위한 헤드리스 브라우저 자동화 CLI agent-browser를 활용하여 E2E 테스트를 작성하고 실행하는 종합 가이드입니다.
이 스킬을 사용할 때
- 웹 애플리케이션 E2E 테스트 작성
- 로그인/회원가입 플로우 테스트
- 폼 입력 및 제출 테스트
- 네비게이션 및 라우팅 테스트
- UI 상호작용 테스트 (클릭, 호버, 스크롤)
- 시각적 상태 확인 (요소 존재, 텍스트 내용)
- CI/CD 파이프라인에서 브라우저 테스트 실행
설치
npm install -g agent-browser
agent-browser setup
agent-browser setup --with-deps
핵심 개념
1. 스냅샷 + Ref 워크플로우
agent-browser의 핵심은 **접근성 트리(Accessibility Tree)**와 ref 시스템입니다.
agent-browser open https://example.com
agent-browser snapshot -i
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
agent-browser snapshot -s "#main"
agent-browser snapshot -i -c -d 5
3. JSON 모드 (AI 에이전트용)
agent-browser snapshot --json
E2E 테스트 패턴
패턴 1: 기본 페이지 테스트
#!/bin/bash
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
set -e
agent-browser open https://myapp.com/login
agent-browser snapshot -i
agent-browser fill @e1 "test@example.com"
agent-browser fill @e2 "password123"
agent-browser click @e3
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
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
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
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
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
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
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*"
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
agent-browser pdf ./page.pdf
JavaScript 실행
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 테스트 러너
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
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)
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 기반 (권장)
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"
시맨틱 로케이터
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"
agent-browser click testid:submit-form
대기 전략
agent-browser wait @element
agent-browser wait text "Success"
agent-browser wait url "**/dashboard"
agent-browser wait 2000
agent-browser wait load
agent-browser wait domcontentloaded
agent-browser wait networkidle
agent-browser wait js "window.appReady === true"
모범 사례
1. 스냅샷 우선 접근
agent-browser snapshot -i
agent-browser click @e1
2. 안정적인 대기
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. 환경별 설정
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 | 브라우저 닫기 |
리소스