AI가 스스로 고치는 Selenium Self‑Healing 테스트를 만들었습니다 (방법은 여기)
Source: Dev.to

모든 QA 자동화 엔지니어가 직면하는 문제
완벽한 Selenium 테스트를 금요일에 작성합니다. 월요일 아침에 테스트가 실패합니다. 개발자가 버튼 ID를 submit-btn에서 submit-button으로 바꿨기 때문이죠. 테스트가 깨졌고, 새로운 기능을 테스트하기보다 로케이터를 고치는 데 시간을 소비하고 있습니다.
익숙한가요? 저도 여러 번 겪었습니다. 그래서 AI가 자동으로 깨진 로케이터를 고쳐주는 프레임워크를 만들었습니다—이제 유지보수 악몽은 끝났습니다.
테스트가 스스로 회복한다면?
전통적인 테스트:
테스트 실행 → 요소를 찾을 수 없음 → 테스트 실패 → 수동으로 고침
셀프‑힐링 테스트:
테스트 실행 → 요소를 찾을 수 없음 → AI가 페이지 분석 → AI가 새로운 로케이터 찾음 → 테스트 계속 진행
두 번째 시나리오가 이제 가능해졌으며, 어떻게 구현하는지 정확히 보여드리겠습니다.
나의 솔루션: AI‑구동 셀프‑힐링
다음 요소들을 결합한 프레임워크를 만들었습니다:
- 가독성 높은 테스트를 위한 Behavior‑Driven Development (BDD)
- 브라우저 자동화를 위한 Selenium
- 지능형 로케이터 수정을 위한 로컬 AI
가장 좋은 점? 무료 오픈‑소스 도구만으로 여러분의 머신에서 완전히 실행됩니다.
실제 예시
Gherkin 시나리오
Scenario: Search Wikipedia
Given I navigate to "https://www.wikipedia.org"
When I search for "Selenium"
Then the page should contain "Selenium"
의도적으로 잘못된 로케이터
private readonly By _searchBox = By.Id("searchBox"); // Wrong!
// The real ID is "searchInput"
테스트 실행 시:
By.Id("searchBox")로 요소 찾기 시도 → ❌ 실패- AI가 페이지 HTML을 분석 → 적절한 로케이터 찾음
- 테스트가 새로운 로케이터 사용 → ✅ 성공
인간 개입 없이 테스트가 스스로 회복됩니다.
실제 동작 방식
아키텍처
- Layer 1 – 테스트 (BDD) – 테스트는 누구나 읽을 수 있는 Gherkin으로 작성됩니다.
- Layer 2 – 셀프‑힐링 엔진 – 로케이터가 실패하면 페이지 HTML을 캡처하고 컨텍스트와 함께 AI에 전송합니다.
- Layer 3 – AI – 로컬에서 실행(e.g., Ollama 또는 GPT)되며 제공된 설명을 기반으로 새로운 로케이터를 제안합니다.
코드 흐름
// Step 1: Normal element finding
try
{
return driver.FindElement(locator);
}
catch (NoSuchElementException)
{
// Element not found - activate self‑healing
}
// Step 2: Ask AI for help
var pageHTML = driver.PageSource;
var suggestion = await aiClient.GetSuggestedLocator(
pageHTML,
failedLocator,
"Search box" // Human description
);
// Step 3: Try AI's suggestion
var element = driver.FindElement(By.XPath(suggestion));
// Success!
전체 과정은 약 2~3초가 소요됩니다.
이 접근법이 효과적인 이유
- 컨텍스트 인식: AI가 “로그인 버튼”과 같은 요소 설명을 이해하고 관련 매치를 찾아냅니다.
- 학습 필요 없음: HTML에 대한 모델의 일반 지식을 활용하므로 별도 머신러닝 학습이 필요 없습니다.
- 무료·프라이빗: 모든 것이 로컬에서 실행되므로 API 비용이 없고, 데이터가 네트워크를 떠나지 않습니다(특히 Ollama 사용 시).
- 언어에 구애받지 않음: React, Angular, Vue, 순수 HTML 등 어디서든 동작합니다. AI는 렌더링된 HTML만 읽으면 됩니다.
설정 방법 (사실 매우 간단)
Step 1 – 사전 요구사항 설치
- .NET 9 SDK (무료)
- Ollama(무료, 로컬 AI) 혹은 OpenAI API 키
- Chrome 브라우저
Step 2 – AI 모델 다운로드
ollama pull qwen3-coder:480b-cloud
Step 3 – 데모 실행
dotnet restore
dotnet build
dotnet test
세 가지 명령만으로 AI 셀프‑힐링을 직접 확인할 수 있습니다.
구축하면서 배운 점
- AI는 컨텍스트가 필요: “search box”와 같은 설명을 제공하는 것이 정확한 제안을 얻는 핵심입니다.
- 로컬 AI도 충분히 훌륭: Qwen3‑Coder 같은 무료 모델이 로케이터 수정에 매우 잘 동작합니다.
- 재시도 로직이 중요: 여러 재시도 전략을 구현해 성공률을 약 70 %에서 95 %로 끌어올렸습니다.
- Temperature 설정이 핵심: 낮은 temperature(예: 0.1)를 사용하면 일관되고 재현 가능한 로케이터 제안을 얻을 수 있습니다.
언제 사용하면 좋은가?
적합한 사용 사례
- 자주 깨지는 회귀 테스트 스위트
- UI가 빠르게 변하는 애플리케이션
- “마법” 같은 데모가 필요한 상황
- QA 인력이 제한된 팀
비추천 상황
- 프로덕션 모니터링(속도 문제)
- 성능 테스트(AI가 오버헤드 발생)
- 픽셀‑정밀 요소 선택이 필수인 경우
- 절대로 오탐이 발생하면 안 되는 테스트
기술 상세
AI 연동
간단한 HTTP 클라이언트가 Ollama API와 통신합니다:
var response = await httpClient.PostAsync(
"http://localhost:11434/api/generate",
jsonContent
);
프롬프트 예시
You are a Selenium expert.
This locator failed: By.Id('searchBox')
Element description: Search input box
Here's the HTML: [truncated HTML]
Suggest a new locator that will work.
Return only the locator, nothing else.
캐싱 전략
같은 페이지에서 같은 로케이터가 두 번 실패하면 이전 AI 제안을 재사용해, 반복 실패 시 힐링 시간을 약 90 % 단축합니다.
오류 처리
모든 AI 시도가 실패하면 테스트는 일반적인 오류 메시지와 함께 정상적으로 실패합니다—묵인된 실패는 없습니다.
프레임워크 확장하기
- 새 사이트 추가: 영어로 된 피처 파일을 하나 만들면 셀프‑힐링이 자동으로 적용됩니다.
- 다른 AI 사용: 설정 파일 하나만 바꾸면 OpenAI로 전환할 수 있습니다:
{
"Provider": "OpenAI",
"ApiKey": "sk-your-key",
"Model": "gpt-4o"
}
- 힐링 로직 커스터마이징: 엔진은 확장 가능하도록 설계되어 있어, 특정 요소 유형에 대한 맞춤 전략을 추가할 수 있습니다.
직접 해보세요
전체 프레임워크는 다음을 포함합니다:
- 자세히 주석 달린 코드
- 작동하는 데모 테스트
- 설정 가이드
- 문서화
모두 초보자를 위해 설계되었습니다. Selenium 테스트를 한 번도 작성해 본 적이 없어도 10분 안에 실행할 수 있습니다. 저장소에는 의도적으로 잘못된 로케이터를 넣은 Wikipedia 검색 테스트가 포함돼 있어, AI가 실시간으로 이를 고치는 모습을 확인할 수 있습니다.
GitHub Repo: