반응형

playwright 21

[TIL][Playwright] pages/ 전체 210개 wait_for_timeout을 0개로 제거한 4단계 과정

pages/ 디렉토리에 wait_for_timeout 호출이 263개 있었다대부분은 "혹시 느릴 수 있으니까"라는 이유로 들어간 것들이었다이 글은 4일에 걸쳐 210개를 이벤트 기반 대기로 전환하고, 재발 방지 Hook까지 구축한 과정을 기록한다wait_for_timeout이 왜 문제인가wait_for_timeout(1000)은 1초를 고정으로 기다린다버튼이 100ms 만에 활성화되어도 1초를 기다린다반대로 네트워크가 느린 날에는 1초 안에 준비가 안 되어 검증이 실패한다두 문제가 동시에 존재한다: 빠를 때는 낭비, 느릴 때는 불안정263개의 wait_for_timeout 호출을 분류해보니 네 가지 카테고리로 나뉘었다카테고리내용건수A이벤트 기반으로 완전 교체 가능25BMCP 실측 기반으로 값 단축 가능1..

TIL/Claude Code 2026.04.14

[TIL][Python] except Exception이 코드 버그를 "요소를 못 찾았다"로 위장시킨다

Page Object에서 이런 코드를 발견했다def click_save_button(self): try: button = self.page.locator(self.locators.SAVE_BUTTON) button.clikc() # ← 오타! click이 아니라 clikc except Exception: logger.warning("저장 버튼을 찾을 수 없음") return Nonebutton.clikc()은 AttributeError를 발생시킨다except Exception이 이걸 잡아서 "저장 버튼을 찾을 수 없음"으로 로깅한다로그만 보면 로케이터 문제 같다실제로는 오타다이 문제가 왜 오래 숨어 있었는가except Exception은 Py..

TIL/Claude Code 2026.04.12

[TIL][Playwright] E2E 검증에서 가장 위험한 코드는 "항상 통과하는 검증"이다

Bench에서 분자를 삭제하는 시나리오가 있다Scenario: 분자를 삭제한다 Given Bench 페이지에 진입한다 When 첫 번째 분자를 삭제한다 Then 분자가 삭제되었음을 확인한다검증이 매번 PASS였다그런데 Then Step 코드를 열어보니 이랬다@then("분자가 삭제되었음을 확인한다")def verify_molecule_removed(bench_page, bench_context): bench_page.take_screenshot("molecule_deleted") logger.info("✓ 분자 삭제 완료")스크린샷 찍고, 로그에 체크마크 출력하고, pytest는 PASS를 반환한다실제로 분자가 삭제되었는지는 아무도 확인하지 않는다삭제 API가 500을 반환해도..

TIL/Claude Code 2026.04.12

[TIL][Playwright] 모달이 버튼 인덱스를 밀어낸다 — nth() 로케이터의 함정

언어 전환 버튼을 선택하는 코드가 있다로컬에서는 잘 돌았는데, CI 에서 터졌다원인을 찾는데 2시간 걸렸다문제: 버튼 인덱스가 밀린다기존 코드는 전체 button 목록에서 인덱스로 언어 버튼을 찾았다# ❌ 기존 코드 — 글로벌 button 인덱스 기반user_btn_idx = page.evaluate(""" () => { const btns = Array.from(document.querySelectorAll('button')); return btns.findIndex(b => b.querySelector('p')); }""")# 언어 버튼 = 아바타 바로 앞 버튼lang_button = page.locator("button").nth(user_btn_idx - 1)l..

TIL/Claude Code 2026.04.04

[TIL][Claude Code] Playwright MCP 로 E2E 디버깅하기 — browser_snapshot 워크플로우

"저장" 버튼을 못 찾는다FAILED - playwright._impl._errors.TimeoutError: Timeout 30000ms exceeded. Locator: get_by_role("button", name="저장")로케이터가 틀렸나? 텍스트가 바뀌었나? 아니면 버튼이 아예 안 나오나?에러 로그만 보고는 모른다에러 로그만 보고 추측하면 생기는 일에러: "저장" 버튼 Timeout ↓추측: "텍스트가 바뀌었겠지" → name="Save" 로 변경 ↓실행 → 또 실패 ↓추측: "버튼이 아니라 link 겠지" → get_by_role("link") 로 변경 ↓실행 → 또 실패 ↓추측: "로딩이 느린가봐" → timeout 60초로 증가 ↓실행 → 또 실패 (6..

TIL/Claude Code 2026.04.02

[TIL][Playwright] SVG 요소는 선택으로 검증하면 안 된다 — DOM 구조 검증

HyperDesign 에서 Warhead 원자가 선택 보호되어 있는지 검증해야 했다처음엔 선택해서 반응이 없으면 보호가 정상이라고 판단했다틀렸다force=True 가 보호를 우회하기 때문이다상황: Covalent HyperDesign 의 Warhead 보호약물 설계 도구에서 분자 구조를 수정할 수 있다그런데 Warhead (반응기) 부분은 수정하면 안 된다UI 에서 Warhead 원자를 선택해도 반응되지 않아야 한다이걸 E2E 자동화로 검증해야 한다첫 번째 시도: 선택 기반 검증 (실패)# ❌ Bad — 선택해서 반응 없으면 보호 정상이라고 판단def test_warhead_protection(page): warhead_atom = page.locator(".warhead-atom").first ..

TIL/Playwright 2026.03.22

[TIL] Claude Code 에서 Playwright Test Agents 활용하기 [못함!]

Claude Code Agent 를 만들어서 E2E Test 를 만들고 있는데 속도가 많이 나질 않아, Playwright 에서 제공하는 공식 Test Agents (Planner/ Generator/ Healer) 를 사용하려고 한다 1. 공식 문서 https://playwright.dev/docs/test-agents Agents | PlaywrightIntroductionplaywright.dev 2. Init프로젝트에 에이전트의 정의를 추가한다npx playwright init-agents --loop=claude 3. Role of Agents1) playwright-test-planner (테스트 계획자)역할: 웹 애플리케이션의 테스트 계획 수립색상: 초록색주요 기능:브라우저 탐색 및 인..

TIL/Claude Code 2026.01.12

[TIL] Claude Code 설정 #3 - Playwright MCP 활용해서 E2E 검증하기

https://helloahram.tistory.com/257 [TIL] Claude Code 설정 #1 - 자주 사용하는 명령어, 유용한 서비스Claude Code Init init 을 실행하면 Claude Code 가 프로젝트를 분석하고, CLAUDE.md 파일을 자동으로 생성한다 CLAUDE.md 파일에는 Project Overview, Essential Commands, Running Tests 등이 포함된다 여기에 내가 주로 사용helloahram.tistory.comhttps://helloahram.tistory.com/259 [TIL] Claude Code 설정 #2 - Super Claude 설치하고 사용하기설정 #1 - https://helloahram.tistory.com/257 [T..

TIL/Claude Code 2025.12.26

로그인 인증 상태 저장 및 재사용 방법 w/ Playwright

로그인의 흐름은 자주 바뀔 수 있다 캡차, OTP, SSO 같은 요소가 섞이면 자동화가 불안정해진다 그래서 사람 손으로 한 번 로그인을 하고, 이후에는 인증 상태를 저장하고 재사용하는 방법을 사용했다 전체 흐름 🧑 사람이 한번 GUI 브라우저로 수동 로그인을 하고 세션을 JSON 으로 저장한다 🤖 실행 시 저장된 JSON 을 Context 에 로드해서 로그인 상태로 시작한다 폴더 구조 project/├── scripts/│ └── save_login_session.py 👈 사람 손으로 로그인해서 세션 저장├── keywords/│ ├── login_keywords.py 👈 저장된 세션을 불러오는 Python 키워드│ └── main_keywords.py ..

TIL/Playwright 2025.08.12

Robot Framework 개념과 사용 예시, 비교

요즘 Robot Framework 를 사용하고 있지만 개념에 대해서는 정리를 안 한 것 같아 한 번 정리해본다 로봇 프레임워크 Robot Framework 자동화 테스트와 RPA, Robotic Process Automation 작업에 사용되는 오픈 소스 테스트 프레임워크 주요 특징항목설명Keyword 기반 테스트사람이 읽기 쉬운 형식으로 테스트를 작성 ex) Login With Valid User데이터 중심, Data-driven테스트 케이스에 다양한 입력값을 적용하여 반복 테스트 가능확장성Python, Java 등으로 사용자 정의 키워드를 개발 가능플러그인 생태계SeleniumLibrary, AppiumLibrary, RequestsLibrary 등 풍부한 라이브러리 지원테스트 레포트 자동 생성테스트..

TIL/용어 2025.08.04
반응형