웹 애플리케이션 테스트
로컬 웹 애플리케이션을 테스트하려면 네이티브 Python Playwright 스크립트를 작성하세요.
사용 가능한 헬퍼 스크립트:
scripts/with_server.py- 서버 수명 주기 관리 (여러 서버 지원)
항상 스크립트를 --help와 함께 먼저 실행하여 사용법을 확인하세요. 스크립트를 실행하기 전에는 소스 코드를 읽지 마세요. 맞춤형 솔루션이 절대적으로 필요한 경우에만 소스를 참조하세요. 이 스크립트들은 매우 커서 컨텍스트 창을 오염시킬 수 있습니다. 컨텍스트 창에 포함시키기보다는 블랙박스 스크립트로 직접 호출하도록 설계되었습니다.
의사 결정 트리: 접근 방식 선택하기
사용자 작업 → 정적 HTML인가?
├─ 예 → HTML 파일을 직접 읽어 선택자 식별
│ ├─ 성공 → 선택자를 사용해 Playwright 스크립트 작성
│ └─ 실패/불완전 → 동적으로 간주 (아래 참조)
│
└─ 아니오 (동적 웹앱) → 서버가 이미 실행 중인가?
├─ 아니오 → 실행: python scripts/with_server.py --help
│ 그런 다음 헬퍼를 사용하고 간소화된 Playwright 스크립트 작성
│
└─ 예 → 정찰-후-행동:
1. 탐색 및 networkidle 대기
2. 스크린샷 캡처 또는 DOM 검사
3. 렌더링된 상태에서 선택자 식별
4. 발견된 선택자로 작업 실행
예제: with_server.py 사용하기
서버를 시작하려면 --help를 먼저 실행한 다음 헬퍼를 사용하세요:
단일 서버:
python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py
여러 서버 (예: 백엔드 + 프론트엔드):
python scripts/with_server.py \
--server "cd backend && python server.py" --port 3000 \
--server "cd frontend && npm run dev" --port 5173 \
-- python your_automation.py
자동화 스크립트를 만들 때는 Playwright 로직만 포함하세요 (서버는 자동으로 관리됩니다):
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True) # 항상 chromium을 헤드리스 모드로 실행
page = browser.new_page()
page.goto('http://localhost:5173') # 서버가 이미 실행 중이고 준비됨
page.wait_for_load_state('networkidle') # 중요: JavaScript 실행을 기다림
# ... 자동화 로직
browser.close()
정찰-후-행동 패턴
-
렌더링된 DOM 검사:
page.screenshot(path='/tmp/inspect.png', full_page=True) content = page.content() page.locator('button').all() -
검사 결과에서 선택자 식별
-
발견된 선택자를 사용하여 작업 실행
일반적인 실수
❌ 하지 말 것 - 동적 앱에서 networkidle을 기다리기 전에 DOM 검사
✅ 할 것 - 검사 전에 page.wait_for_load_state('networkidle') 대기
모범 사례
- 번들 스크립트를 블랙박스로 사용 - 작업을 수행할 때
scripts/에 있는 스크립트 중 도움이 될 만한 것이 있는지 고려하세요. 이 스크립트들은 일반적이고 복잡한 워크플로를 안정적으로 처리하며 컨텍스트 창을 오염시키지 않습니다.--help로 사용법을 확인한 후 직접 호출하세요. - 동기 스크립트에는
sync_playwright()사용 - 작업 완료 후 항상 브라우저 닫기
- 설명적인 선택자 사용:
text=,role=, CSS 선택자 또는 ID - 적절한 대기 추가:
page.wait_for_selector()또는page.wait_for_timeout()
참고 파일
- examples/ - 일반적인 패턴을 보여주는 예제:
element_discovery.py- 페이지에서 버튼, 링크, 입력 요소 발견static_html_automation.py- file:/ URL을 사용한 로컬 HTML 자동화console_logging.py- 자동화 중 콘솔 로그 캡처