메인 컨텐츠로 건너뛰기

자주 묻는 질문

WebdriverIO MCP에 대한 자주 묻는 질문들입니다.

일반

MCP란 무엇인가요?

MCP(Model Context Protocol)는 Claude와 같은 AI 어시스턴트가 외부 도구 및 서비스와 상호작용할 수 있게 해주는 오픈 프로토콜입니다. WebdriverIO MCP는 이 프로토콜을 구현하여 Claude Desktop과 Claude Code에 브라우저 및 모바일 자동화 기능을 제공합니다.

WebdriverIO MCP로 무엇을 자동화할 수 있나요?

다음을 자동화할 수 있습니다:

  • 데스크톱 브라우저(Chrome) - 탐색, 클릭, 입력, 스크린샷
  • iOS 앱 - 시뮬레이터나 실제 기기에서
  • Android 앱 - 에뮬레이터나 실제 기기에서
  • 하이브리드 앱 - 네이티브와 웹 컨텍스트 간 전환

코드를 작성해야 하나요?

아니요! 이것이 MCP의 주요 이점입니다. 자연어로 원하는 작업을 설명하면 Claude가 적절한 도구를 사용하여 작업을 수행합니다.

예시 프롬프트:

  • "Chrome을 열고 webdriver.io로 이동해줘"
  • "Get Started 버튼을 클릭해줘"
  • "현재 페이지의 스크린샷을 찍어줘"
  • "iOS 앱을 실행하고 테스트 사용자로 로그인해줘"

설치 및 설정

WebdriverIO MCP를 어떻게 설치하나요?

별도로 설치할 필요가 없습니다. MCP 서버는 Claude Desktop이나 Claude Code에서 구성할 때 npx를 통해 자동으로 실행됩니다.

Claude Desktop 설정에 다음을 추가하세요:

{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"]
}
}
}

Claude Desktop 설정 파일은 어디에 있나요?

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

브라우저 자동화에 Appium이 필요한가요?

아니요. 브라우저 자동화는 Chrome만 설치되어 있으면 됩니다. WebdriverIO가 ChromeDriver를 자동으로 처리합니다.

모바일 자동화에 Appium이 필요한가요?

네. 모바일 자동화에는 다음이 필요합니다:

  1. Appium 서버 실행 (npm install -g appium && appium)
  2. 플랫폼 드라이버 설치 (iOS의 경우 appium driver install xcuitest, Android의 경우 appium driver install uiautomator2)
  3. 적절한 개발 도구 (iOS의 경우 Xcode, Android의 경우 Android SDK)

브라우저 자동화

어떤 브라우저가 지원되나요?

현재는 Chrome만 지원됩니다. 다른 브라우저에 대한 지원은 향후 버전에서 추가될 수 있습니다.

Chrome을 헤드리스 모드로 실행할 수 있나요?

네! Claude에게 헤드리스 모드로 브라우저를 시작하도록 요청하세요:

"헤드리스 모드로 Chrome 시작해줘"

또는 Claude가 적절한 상황(예: CI/CD 환경)에서 이 옵션을 사용할 것입니다.

브라우저 창 크기를 설정할 수 있나요?

네. 브라우저를 시작할 때 크기를 지정할 수 있습니다:

"1920x1080 창 크기로 Chrome을 시작해줘"

지원되는 치수: 400-3840픽셀 너비, 400-2160픽셀 높이. 기본값은 1920x1080입니다.

브라우저를 시작하고 한 번에 탐색할 수 있나요?

네! navigationUrl 매개변수를 사용하세요:

"Chrome을 시작하고 https://webdriver.io로 이동해줘"

브라우저를 시작한 다음 별도로 탐색하는 것보다 더 효율적입니다.

스크린샷은 어떻게 찍나요?

간단히 Claude에게 요청하세요:

"현재 페이지의 스크린샷을 찍어줘"

스크린샷은 자동으로 최적화됩니다:

  • 최대 2000px 치수로 조정
  • 최대 1MB 파일 크기로 압축
  • 형식: PNG 또는 JPEG (최적의 품질을 위해 자동 선택)

iframe과 상호작용할 수 있나요?

현재 MCP 서버는 메인 문서에서 작동합니다. iframe 상호작용은 향후 버전에서 추가될 수 있습니다.

커스텀 JavaScript를 실행할 수 있나요?

네! execute_script 도구를 사용하세요:

"페이지 제목을 가져오는 스크립트를 실행해줘" "스크립트 실행: return document.querySelectorAll('button').length"


모바일 자동화

iOS 앱을 어떻게 시작하나요?

필요한 정보와 함께 Claude에게 요청하세요:

"iPhone 15 시뮬레이터에서 /path/to/MyApp.app에 있는 iOS 앱을 실행해줘"

또는 이미 설치된 앱의 경우:

"iPhone 15 시뮬레이터에서 noReset을 활성화하여 앱을 실행해줘"

Android 앱을 어떻게 시작하나요?

"Pixel 7 에뮬레이터에서 /path/to/app.apk에 있는 Android 앱을 실행해줘"

또는 이미 설치된 앱의 경우:

"Pixel 7 에뮬레이터에서 noReset을 활성화하여 앱을 실행해줘"

실제 기기에서 테스트할 수 있나요?

네! 실제 기기의 경우 기기 UDID가 필요합니다:

  • iOS: 기기 연결, Finder 열기, 기기 클릭, 시리얼 번호 클릭하여 UDID 확인
  • Android: 터미널에서 adb devices 실행

그런 다음 Claude에게 요청하세요:

"UDID abc123...인 실제 기기에서 iOS 앱을 실행해줘"

권한 대화상자는 어떻게 처리하나요?

기본적으로 권한은 자동으로 부여됩니다 (autoGrantPermissions: true). 권한 플로우를 테스트해야 하는 경우 이 기능을 비활성화할 수 있습니다:

"자동 권한 부여 없이 앱을 실행해줘"

어떤 제스처가 지원되나요?

  • 탭: 요소나 좌표를 탭
  • 스와이프: 위, 아래, 왼쪽, 오른쪽으로 스와이프
  • 드래그 앤 드롭: 한 요소에서 다른 요소나 좌표로 드래그

참고: long_press는 Appium 모바일 명령으로 execute_script를 통해 사용 가능합니다.

모바일 앱에서 스크롤은 어떻게 하나요?

스와이프 제스처를 사용하세요:

"아래로 스크롤하기 위해 위로 스와이프해줘" "위로 스크롤하기 위해 아래로 스와이프해줘"

기기를 회전시킬 수 있나요?

네:

"기기를 가로 모드로 회전해줘" "기기를 세로 모드로 회전해줘"

하이브리드 앱은 어떻게 처리하나요?

웹뷰가 있는 앱의 경우 컨텍스트를 전환할 수 있습니다:

"사용 가능한 컨텍스트를 가져와줘" "웹뷰 컨텍스트로 전환해줘" "네이티브 컨텍스트로 돌아가줘"

Appium 모바일 명령을 실행할 수 있나요?

네! execute_script 도구를 사용하세요:

"mobile: pressKey" 스크립트를 [{ keycode: 4 }] 인자로 실행해줘  // Android에서 BACK 키 누르기
"mobile: activateApp" 스크립트를 [{ appId: "com.example.app" }] 인자로 실행해줘
"mobile: terminateApp" 스크립트를 [{ bundleId: "com.example.app" }] 인자로 실행해줘

요소 선택

Claude는 어떤 요소와 상호작용할지 어떻게 알 수 있나요?

Claude는 get_visible_elements 도구를 사용하여 페이지/화면의 상호작용 가능한 요소를 식별합니다. 각 요소에는 여러 선택자 전략이 포함됩니다.

페이지에 요소가 너무 많으면 어떻게 하나요?

페이지네이션을 사용하여 대량의 요소 목록을 관리하세요:

"처음 20개의 보이는 요소를 가져와줘" "오프셋 20과 한도 20으로 보이는 요소를 가져와줘"

응답에는 요소 탐색을 돕기 위한 total, showing, hasMore가 포함됩니다.

특정 유형의 요소만 가져올 수 있나요?

네! elementType 매개변수를 사용하세요:

  • interactable (기본값): 버튼, 링크, 입력 필드
  • visual: 이미지, SVG
  • all: 두 유형 모두

"페이지에서 시각적 요소를 가져와줘"

Claude가 잘못된 요소를 클릭하면 어떻게 하나요?

더 구체적으로 지정할 수 있습니다:

  • 정확한 텍스트 제공: "'주문 제출'이라고 쓰여진 버튼을 클릭해줘"
  • 선택자 제공: "#submit-btn 선택자가 있는 요소를 클릭해줘"
  • 접근성 ID 제공: "loginButton 접근성 ID가 있는 요소를 클릭해줘"

모바일에서 가장 좋은 선택자 전략은 무엇인가요?

  1. 접근성 ID (최선) - ~loginButton
  2. 리소스 ID (Android) - id=login_button
  3. 조건 문자열 (iOS) - -ios predicate string:label == "Login"
  4. XPath (최후 수단) - 더 느리지만 어디서나 작동함

접근성 트리란 무엇이며 언제 사용해야 하나요?

접근성 트리는 페이지 요소에 대한 의미론적 정보(역할, 이름, 상태)를 제공합니다. 다음과 같은 경우 get_accessibility를 사용하세요:

  • get_visible_elements가 예상된 요소를 반환하지 않을 때
  • 접근성 역할(버튼, 링크, 텍스트박스 등)로 요소를 찾아야 할 때
  • 요소에 대한 자세한 의미론적 정보가 필요할 때

"버튼 및 링크 역할로 필터링된 접근성 트리를 가져와줘"


세션 관리

여러 세션을 동시에 가질 수 있나요?

아니요. MCP 서버는 단일 세션 모델을 사용합니다. 한 번에 하나의 브라우저 또는 앱 세션만 활성화할 수 있습니다.

세션을 닫으면 어떻게 되나요?

세션 유형 및 설정에 따라 다릅니다:

  • 브라우저: Chrome이 완전히 종료됨
  • 모바일 (noReset: false 사용): 앱이 종료됨
  • 모바일 (noReset: true 또는 appPath 없음): 앱이 열린 상태로 유지됨 (세션이 자동으로 분리됨)

세션 간에 앱 상태를 유지할 수 있나요?

네! noReset 옵션을 사용하세요:

"noReset을 활성화하여 앱을 실행해줘"

이렇게 하면 로그인 상태, 환경 설정 및 기타 앱 데이터가 유지됩니다.

close와 detach의 차이점은 무엇인가요?

  • Close: 브라우저/앱을 완전히 종료함
  • Detach: 자동화는 연결 해제하지만 브라우저/앱은 계속 실행됨

Detach는 자동화 후 상태를 수동으로 검사하고 싶을 때 유용합니다.

디버깅 중에 세션이 계속 시간 초과됩니다

명령 시간 초과를 늘리세요:

"newCommandTimeout을 300초로 설정하여 앱을 실행해줘"

기본값은 60초입니다. 긴 디버깅 세션의 경우 300-600초를 시도해보세요.


문제 해결

"Session not found" 오류

활성 세션이 없다는 의미입니다. 먼저 브라우저나 앱 세션을 시작하세요:

"Chrome을 시작하고 google.com으로 이동해줘"

"Element not found" 오류

요소가 보이지 않거나 다른 선택자를 가질 수 있습니다. 다음을 시도해보세요:

  1. 먼저 Claude에게 모든 보이는 요소를 가져오도록 요청하기
  2. 더 구체적인 선택자 제공하기
  3. 페이지/앱이 완전히 로드될 때까지 기다리기
  4. 화면 밖 요소를 찾기 위해 inViewportOnly: false 사용하기

브라우저가 시작되지 않습니다

  1. Chrome이 설치되어 있는지 확인하세요
  2. 다른 프로세스가 디버깅 포트(9222)를 사용하고 있는지 확인하세요
  3. 헤드리스 모드를 시도해보세요

Appium 연결 실패

이는 모바일 자동화를 시작할 때 가장 흔한 문제입니다.

  1. Appium이 실행 중인지 확인: curl http://localhost:4723/status
  2. 필요한 경우 Appium 시작: appium
  3. Appium URL 구성이 서버와 일치하는지 확인
  4. 드라이버가 설치되어 있는지 확인: appium driver list --installed

MCP 서버는 모바일 세션을 시작하기 전에 Appium이 실행 중이어야 합니다. 먼저 Appium을 시작해야 합니다:

appium

향후 버전에서는 자동 Appium 서비스 관리가 포함될 수 있습니다.

iOS 시뮬레이터가 시작되지 않습니다

  1. Xcode가 설치되어 있는지 확인: xcode-select --install
  2. 사용 가능한 시뮬레이터 나열: xcrun simctl list devices
  3. Console.app에서 특정 시뮬레이터 오류 확인

Android 에뮬레이터가 시작되지 않습니다

  1. ANDROID_HOME 설정: export ANDROID_HOME=$HOME/Library/Android/sdk
  2. 에뮬레이터 확인: emulator -list-avds
  3. 에뮬레이터 수동 시작: emulator -avd <avd-name>
  4. 기기 연결 확인: adb devices

스크린샷이 작동하지 않습니다

  1. 모바일의 경우 세션이 활성 상태인지 확인
  2. 브라우저의 경우 다른 페이지를 시도해보세요 (일부 페이지는 스크린샷을 차단함)
  3. Claude Desktop 로그에서 오류 확인

스크린샷은 자동으로 최대 1MB로 압축되므로, 큰 스크린샷은 작동하지만 품질이 낮을 수 있습니다.


성능

모바일 자동화가 느린 이유는 무엇인가요?

모바일 자동화에는 다음이 포함됩니다:

  1. Appium 서버와의 네트워크 통신
  2. Appium이 기기/시뮬레이터와 통신
  3. 기기 렌더링 및 응답

자동화 속도 향상 팁:

  • 개발 시 실제 기기 대신 에뮬레이터/시뮬레이터 사용
  • XPath 대신 접근성 ID 사용
  • 요소 감지를 위해 inViewportOnly: true 활성화
  • 토큰 사용을 줄이기 위해 페이지네이션 (limit) 사용

요소 감지 속도를 높이려면 어떻게 해야 하나요?

MCP 서버는 XML 페이지 소스 파싱을 사용하여 요소 감지를 이미 최적화했습니다(전통적인 요소 쿼리의 경우 600+ 대신 2개의 HTTP 호출). 추가 팁:

  • inViewportOnly: true 유지 (기본값)
  • includeContainers: false 설정 (기본값)
  • 큰 화면에서 페이지네이션을 위해 limitoffset 사용
  • 모든 요소를 찾는 대신 특정 선택자 사용

스크린샷이 느리거나 실패합니다

스크린샷은 자동으로 최적화됩니다:

  • 2000px보다 큰 경우 크기 조정
  • 1MB 이하로 압축
  • PNG가 너무 큰 경우 JPEG로 변환

이 최적화는 처리 시간을 줄이고 Claude가 이미지를 처리할 수 있도록 합니다.


제한 사항

현재 제한 사항은 무엇인가요?

  • 단일 세션: 한 번에 하나의 브라우저/앱만 가능
  • 브라우저 지원: Chrome만 지원 (현재까지)
  • iframe 지원: iframe에 대한 제한된 지원
  • 파일 업로드: 도구를 통해 직접 지원되지 않음
  • 오디오/비디오: 미디어 재생과 상호작용할 수 없음
  • 브라우저 확장 프로그램: 지원되지 않음

이를 프로덕션 테스트에 사용할 수 있나요?

WebdriverIO MCP는 대화형 AI 지원 자동화용으로 설계되었습니다. 프로덕션 CI/CD 테스트의 경우 완전한 프로그래밍 제어가 가능한 WebdriverIO의 전통적인 테스트 러너를 사용하는 것이 좋습니다.


보안

내 데이터는 안전한가요?

MCP 서버는 사용자의 컴퓨터에서 로컬로 실행됩니다. 모든 자동화는 로컬 브라우저/Appium 연결을 통해 이루어집니다. 명시적으로 탐색하는 대상 외에는 외부 서버로 데이터가 전송되지 않습니다.

Claude가 내 비밀번호에 접근할 수 있나요?

Claude는 페이지 내용을 보고 요소와 상호작용할 수 있지만:

  • <input type="password"> 필드의 비밀번호는 마스킹 처리됨
  • 민감한 자격 증명 자동화는 피해야 함
  • 자동화에는 테스트 계정을 사용할 것

기여하기

어떻게 기여할 수 있나요?

GitHub 저장소를 방문하여:

  • 버그 신고하기
  • 기능 요청하기
  • 풀 리퀘스트 제출하기

어디서 도움을 받을 수 있나요?

Welcome! How can I help?

WebdriverIO AI Copilot