Przejdź do głównej treści

Konfiguracja

Ta strona dokumentuje wszystkie opcje konfiguracyjne dla serwera WebdriverIO MCP.

Konfiguracja serwera MCP​

Serwer MCP jest konfigurowany poprzez pliki konfiguracyjne Claude Desktop lub Claude Code.

Podstawowa konfiguracja​

macOS​

Edytuj ~/Library/Application Support/Claude/claude_desktop_config.json:

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

Windows​

Edytuj %APPDATA%\Claude\claude_desktop_config.json:

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

Claude Code​

Edytuj .claude/settings.json swojego projektu:

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

Zmienne środowiskowe​

Skonfiguruj połączenie z serwerem Appium i inne ustawienia za pomocą zmiennych środowiskowych.

Połączenie Appium​

ZmiennaTypWartość domyślnaOpis
APPIUM_URLstring127.0.0.1Nazwa hosta serwera Appium
APPIUM_URL_PORTnumber4723Port serwera Appium
APPIUM_PATHstring/Ścieżka serwera Appium

Przykład ze zmiennymi środowiskowymi​

{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"],
"env": {
"APPIUM_URL": "192.168.1.100",
"APPIUM_URL_PORT": "4724",
"APPIUM_PATH": "/wd/hub"
}
}
}
}

Opcje sesji przeglądarki​

Opcje dostępne podczas uruchamiania sesji przeglądarki za pomocą narzędzia start_browser.

headless​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: false

Uruchamia Chrome w trybie headless (bez widocznego okna przeglądarki). Przydatne w środowiskach CI/CD lub gdy nie potrzebujesz widzieć przeglądarki.

windowWidth​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 1920
  • Zakres: 400 - 3840

Początkowa szerokość okna przeglądarki w pikselach.

windowHeight​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 1080
  • Zakres: 400 - 2160

Początkowa wysokość okna przeglądarki w pikselach.

  • Typ: string
  • Obowiązkowe: Nie

URL, do którego nastąpi nawigacja natychmiast po uruchomieniu przeglądarki. Jest to bardziej efektywne niż wywołanie start_browser, a następnie oddzielnie navigate.

Przykład: Uruchom przeglądarkę i nawiguj w jednym wywołaniu:

Start Chrome and navigate to https://webdriver.io

Opcje sesji mobilnej​

Opcje dostępne podczas uruchamiania sesji aplikacji mobilnej za pomocą narzędzia start_app_session.

Opcje platformy​

platform​

  • Typ: string
  • Obowiązkowe: Tak
  • Wartości: iOS | Android

Platforma mobilna do automatyzacji.

platformVersion​

  • Typ: string
  • Obowiązkowe: Nie

Wersja systemu operacyjnego urządzenia/symulatora/emulatora (np. 17.0 dla iOS, 14 dla Android).

automationName​

  • Typ: string
  • Obowiązkowe: Nie
  • Wartości: XCUITest (iOS), UiAutomator2 | Espresso (Android)

Sterownik automatyzacji do użycia. Domyślnie XCUITest dla iOS i UiAutomator2 dla Androida.

Opcje urządzenia​

deviceName​

  • Typ: string
  • Obowiązkowe: Tak

Nazwa urządzenia, symulatora lub emulatora do użycia.

Przykłady:

  • Symulator iOS: iPhone 15 Pro, iPad Air (5th generation)
  • Emulator Android: Pixel 7, Nexus 5X
  • Rzeczywiste urządzenie: Nazwa urządzenia wyświetlana w systemie

udid​

  • Typ: string
  • Obowiązkowe: Nie (Wymagane dla rzeczywistych urządzeń iOS)

Unikalny identyfikator urządzenia. Wymagany dla rzeczywistych urządzeń iOS (40-znakowy identyfikator) i zalecany dla rzeczywistych urządzeń Android.

Znajdowanie UDID:

  • iOS: Podłącz urządzenie, otwórz Finder/iTunes, kliknij na urządzenie → Numer seryjny (kliknij, aby ujawnić UDID)
  • Android: Uruchom adb devices w terminalu

Opcje aplikacji​

appPath​

  • Typ: string
  • Obowiązkowe: Nie*

Ścieżka do pliku aplikacji do zainstalowania i uruchomienia.

Obsługiwane formaty:

  • Symulator iOS: katalog .app
  • Rzeczywiste urządzenie iOS: plik .ipa
  • Android: plik .apk

*Albo appPath musi być dostarczone, albo noReset: true, aby połączyć się z już uruchomioną aplikacją.

appWaitActivity​

  • Typ: string
  • Obowiązkowe: Nie (tylko Android)

Aktywność, na którą należy poczekać przy uruchomieniu aplikacji. Jeśli nie określono, używana jest główna/startowa aktywność aplikacji.

Przykład: com.example.app.MainActivity

Opcje stanu sesji​

noReset​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: false

Zachowuje stan aplikacji między sesjami. Gdy true:

  • Dane aplikacji są zachowywane (stan logowania, preferencje itp.)
  • Sesja zostanie odłączona zamiast zamknięta (aplikacja pozostanie uruchomiona)
  • Przydatne do testowania ścieżek użytkownika w wielu sesjach
  • Można używać bez appPath do połączenia z już uruchomioną aplikacją

fullReset​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: true

Całkowicie resetuje aplikację przed sesją. Gdy true:

  • iOS: Odinstalowuje i ponownie instaluje aplikację
  • Android: Czyści dane i pamięć podręczną aplikacji
  • Przydatne do rozpoczynania z czystym stanem

Ustaw fullReset: false z noReset: true, aby całkowicie zachować stan aplikacji.

Timeout sesji​

newCommandTimeout​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 60

Jak długo (w sekundach) Appium będzie czekać na nową komendę, zanim uzna, że klient zakończył działanie i zakończy sesję. Zwiększ tę wartość dla dłuższych sesji debugowania.

Przykłady:

  • 60 - Domyślnie, odpowiednie dla większości automatyzacji
  • 300 - 5 minut, do debugowania lub wolniejszych operacji
  • 600 - 10 minut, do bardzo długo działających testów

Opcje automatycznej obsługi​

autoGrantPermissions​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: true

Automatycznie przyznaje uprawnienia aplikacji podczas instalacji/uruchomienia. Gdy true:

  • Uprawnienia do kamery, mikrofonu, lokalizacji itp. są automatycznie przyznawane
  • Nie jest potrzebna ręczna obsługa dialogów uprawnień
  • Usprawnia automatyzację poprzez unikanie okien dialogowych uprawnień
Tylko Android

Ta opcja dotyczy głównie Androida. Uprawnienia iOS muszą być obsługiwane inaczej ze względu na ograniczenia systemowe.

autoAcceptAlerts​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: true

Automatycznie akceptuje alerty systemowe (dialogi) pojawiające się podczas automatyzacji.

Przykłady automatycznie akceptowanych alertów:

  • "Zezwolić na powiadomienia?"
  • "Aplikacja chciałaby uzyskać dostęp do Twojej lokalizacji"
  • "Zezwolić aplikacji na dostęp do zdjęć?"

autoDismissAlerts​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: false

Odrzuca (anuluje) alerty systemowe zamiast je akceptować. Ma pierwszeństwo przed autoAcceptAlerts, gdy ustawione na true.

Nadpisanie serwera Appium​

Możesz nadpisać połączenie z serwerem Appium dla konkretnej sesji:

appiumHost​

  • Typ: string
  • Obowiązkowe: Nie

Nazwa hosta serwera Appium. Nadpisuje zmienną środowiskową APPIUM_URL.

appiumPort​

  • Typ: number
  • Obowiązkowe: Nie

Port serwera Appium. Nadpisuje zmienną środowiskową APPIUM_URL_PORT.

appiumPath​

  • Typ: string
  • Obowiązkowe: Nie

Ścieżka serwera Appium. Nadpisuje zmienną środowiskową APPIUM_PATH.


Opcje wykrywania elementów​

Opcje dla narzędzia get_visible_elements.

elementType​

  • Typ: string
  • Obowiązkowe: Nie
  • Domyślnie: interactable
  • Wartości: interactable | visual | all

Typ elementów do zwrócenia:

  • interactable: Przyciski, linki, pola wejściowe i inne elementy klikalne
  • visual: Obrazy, SVG i elementy wizualne
  • all: Zarówno elementy interaktywne, jak i wizualne

inViewportOnly​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: true

Zwraca tylko elementy, które są widoczne w bieżącym obszarze widocznym. Gdy false, zwraca wszystkie elementy w hierarchii widoku (przydatne do znajdowania elementów poza ekranem).

includeContainers​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: false

Dołącza elementy kontenera/layoutu w wynikach. Gdy true:

Dołączane kontenery Android:

  • ViewGroup, FrameLayout, LinearLayout
  • RelativeLayout, ConstraintLayout
  • ScrollView, RecyclerView

Dołączane kontenery iOS:

  • View, StackView, CollectionView
  • ScrollView, TableView

Przydatne do debugowania problemów z layoutem lub zrozumienia hierarchii widoku.

includeBounds​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: false

Dołącza granice/współrzędne elementów (x, y, szerokość, wysokość) w odpowiedzi. Ustaw na true dla:

  • Interakcji opartych na współrzędnych
  • Debugowania layoutu
  • Pozycjonowania elementów wizualnych

Opcje paginacji​

Dla dużych stron z wieloma elementami, użyj paginacji, aby zmniejszyć zużycie tokenów:

limit​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 0 (nieograniczony)

Maksymalna liczba elementów do zwrócenia.

offset​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 0

Liczba elementów do pominięcia przed zwróceniem wyników.

Przykład: Pobierz elementy 21-40:

Get visible elements with limit 20 and offset 20

Opcje drzewa dostępności​

Opcje dla narzędzia get_accessibility (tylko przeglądarka).

limit​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 100

Maksymalna liczba węzłów do zwrócenia. Użyj 0 dla nieograniczonej liczby (niezalecane dla dużych stron).

offset​

  • Typ: number
  • Obowiązkowe: Nie
  • Domyślnie: 0

Liczba węzłów do pominięcia dla paginacji.

roles​

  • Typ: string[]
  • Obowiązkowe: Nie
  • Domyślnie: Wszystkie role

Filtruj do określonych ról dostępności.

Popularne role: button, link, textbox, checkbox, radio, heading, img, listitem

Przykład: Pobierz tylko przyciski i linki:

Get accessibility tree filtered to button and link roles

namedOnly​

  • Typ: boolean
  • Obowiązkowe: Nie
  • Domyślnie: true

Zwraca tylko węzły, które mają nazwę/etykietę. Filtruje anonimowe kontenery i redukuje szum w wynikach.


Opcje zrzutu ekranu​

Opcje dla narzędzia take_screenshot.

outputPath​

  • Typ: string
  • Obowiązkowe: Nie

Ścieżka, gdzie zapisać plik zrzutu ekranu. Jeśli nie podano, zwraca dane obrazu zakodowane w base64.

Automatyczna optymalizacja​

Zrzuty ekranu są automatycznie przetwarzane w celu optymalizacji dla konsumpcji LLM:

OptymalizacjaWartośćOpis
Maksymalny wymiar2000pxObrazy większe niż 2000px są skalowane
Maksymalny rozmiar pliku1MBObrazy są kompresowane, aby pozostać poniżej 1MB
FormatPNG/JPEGPNG z maksymalną kompresją; JPEG, jeśli potrzebny dla rozmiaru

Ta optymalizacja zapewnia, że zrzuty ekranu mogą być efektywnie przetwarzane bez przekraczania limitów tokenów.


Zachowanie sesji​

Typy sesji​

Serwer MCP śledzi typy sesji, aby zapewnić odpowiednie narzędzia i zachowanie:

TypOpisAuto-odłączanie
browserSesja przeglądarki ChromeNie
iosSesja aplikacji iOSTak (jeśli noReset: true lub brak appPath)
androidSesja aplikacji AndroidTak (jeśli noReset: true lub brak appPath)

Model pojedynczej sesji​

Serwer MCP działa z modelem pojedynczej sesji:

  • Tylko jedna sesja przeglądarki LUB aplikacji może być aktywna jednocześnie
  • Rozpoczęcie nowej sesji zamknie/odłączy bieżącą sesję
  • Stan sesji jest utrzymywany globalnie we wszystkich wywołaniach narzędzi

Odłączanie vs Zamykanie​

Akcjadetach: false (Zamknij)detach: true (Odłącz)
PrzeglądarkaCałkowicie zamyka ChromeUtrzymuje Chrome działające, rozłącza WebDriver
Aplikacja mobilnaZamyka aplikacjęUtrzymuje aplikację działającą w aktualnym stanie
Przypadek użyciaCzysta sytuacja dla następnej sesjiZachowanie stanu, ręczna inspekcja

Kwestie wydajnościowe​

Serwer MCP jest zoptymalizowany pod kątem efektywnej komunikacji LLM przy użyciu formatu TOON (Token-Oriented Object Notation), który minimalizuje użycie tokenów podczas wysyłania danych do Claude.

Automatyzacja przeglądarki​

  • Tryb headless jest szybszy, ale nie renderuje elementów wizualnych
  • Mniejsze rozmiary okna zmniejszają czas przechwytywania zrzutów ekranu
  • Wykrywanie elementów jest zoptymalizowane poprzez pojedyncze wykonanie skryptu
  • Optymalizacja zrzutów ekranu utrzymuje obrazy poniżej 1MB dla wydajnego przetwarzania
  • inViewportOnly: true (domyślnie) filtruje tylko do widocznych elementów

Automatyzacja mobilna​

  • Parsowanie źródła strony XML używa tylko 2 wywołań HTTP (w porównaniu do 600+ dla tradycyjnych zapytań elementów)
  • Selektory Accessibility ID są najszybsze i najbardziej niezawodne
  • Selektory XPath są najwolniejsze - używaj tylko w ostateczności
  • inViewportOnly: true (domyślnie) znacząco redukuje liczbę elementów
  • Paginacja (limit i offset) zmniejsza użycie tokenów dla ekranów z wieloma elementami
  • includeBounds: false (domyślnie) pomija dane o współrzędnych, chyba że są potrzebne

Wskazówki dotyczące użycia tokenów​

UstawienieWpływ
inViewportOnly: trueFiltruje elementy poza ekranem, zmniejszając rozmiar odpowiedzi
includeContainers: falseWyklucza elementy układu (ViewGroup itp.)
includeBounds: falsePomija dane x/y/szerokość/wysokość
limit z paginacjąPrzetwarzaj elementy partiami zamiast wszystkie naraz
namedOnly: true (dostępność)Filtruje anonimowe węzły

Konfiguracja serwera Appium​

Przed użyciem automatyzacji mobilnej upewnij się, że Appium jest poprawnie skonfigurowany.

Podstawowa konfiguracja​

# Instaluj Appium globalnie
npm install -g appium

# Instaluj sterowniki
appium driver install xcuitest # iOS
appium driver install uiautomator2 # Android

# Uruchom serwer
appium

Niestandardowa konfiguracja serwera​

# Uruchom z niestandardowym hostem i portem
appium --address 0.0.0.0 --port 4724

# Uruchom z logowaniem
appium --log-level debug

# Uruchom z określoną ścieżką bazową
appium --base-path /wd/hub

Weryfikacja instalacji​

# Sprawdź zainstalowane sterowniki
appium driver list --installed

# Sprawdź wersję Appium
appium --version

# Testuj połączenie
curl http://localhost:4723/status

Rozwiązywanie problemów z konfiguracją​

Serwer MCP nie uruchamia się​

  1. Sprawdź, czy npm/npx jest zainstalowany: npm --version
  2. Spróbuj uruchomić ręcznie: npx @wdio/mcp
  3. Sprawdź logi Claude Desktop pod kątem błędów

Problemy z połączeniem Appium​

  1. Sprawdź, czy Appium działa: curl http://localhost:4723/status
  2. Sprawdź, czy zmienne środowiskowe pasują do ustawień serwera Appium
  3. Upewnij się, że firewall zezwala na połączenia na porcie Appium

Sesja nie uruchamia się​

  1. Przeglądarka: Upewnij się, że Chrome jest zainstalowany
  2. iOS: Sprawdź, czy Xcode i symulatory są dostępne
  3. Android: Sprawdź ANDROID_HOME i czy emulator jest uruchomiony
  4. Przejrzyj logi serwera Appium pod kątem szczegółowych komunikatów o błędach

Przekroczenie limitu czasu sesji​

Jeśli sesje przekraczają limit czasu podczas debugowania:

  1. Zwiększ newCommandTimeout podczas uruchamiania sesji
  2. Użyj noReset: true, aby zachować stan między sesjami
  3. Użyj detach: true podczas zamykania, aby aplikacja działała dalej

Welcome! How can I help?

WebdriverIO AI Copilot