تخطى إلى المحتوى الرئيسي

الإعدادات

تُوثّق هذه الصفحة جميع خيارات الإعداد لخادم WebdriverIO MCP.

إعدادات خادم MCP​

يتم إعداد خادم MCP من خلال ملفات إعدادات Claude Desktop أو Claude Code.

الإعداد الأساسي​

نظام macOS​

قم بتعديل ~/Library/Application Support/Claude/claude_desktop_config.json:

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

نظام Windows​

قم بتعديل %APPDATA%\Claude\claude_desktop_config.json:

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

Claude Code​

قم بتعديل ملف .claude/settings.json في مشروعك:

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

متغيرات البيئة​

قم بإعداد اتصال خادم Appium والإعدادات الأخرى عبر متغيرات البيئة.

اتصال Appium​

المتغيرالنوعالقيمة الافتراضيةالوصف
APPIUM_URLstring127.0.0.1اسم مضيف خادم Appium
APPIUM_URL_PORTnumber4723منفذ خادم Appium
APPIUM_PATHstring/مسار خادم Appium

مثال باستخدام متغيرات البيئة​

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

خيارات جلسة المتصفح​

الخيارات المتاحة عند بدء جلسة متصفح عبر أداة start_browser.

headless​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: false

تشغيل Chrome في وضع بدون واجهة (بدون نافذة متصفح مرئية). مفيد لبيئات CI/CD أو عندما لا تحتاج لرؤية المتصفح.

windowWidth​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 1920
  • النطاق: 400 - 3840

عرض نافذة المتصفح الأولي بالبكسل.

windowHeight​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 1080
  • النطاق: 400 - 2160

ارتفاع نافذة المتصفح الأولي بالبكسل.

  • النوع: string
  • إلزامي: لا

عنوان URL للانتقال إليه فورًا بعد بدء المتصفح. هذا أكثر كفاءة من استدعاء start_browser متبوعًا بـ navigate بشكل منفصل.

مثال: بدء المتصفح والانتقال في استدعاء واحد:

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

خيارات جلسة تطبيقات الهاتف المحمول​

الخيارات المتاحة عند بدء جلسة تطبيق محمول عبر أداة start_app_session.

خيارات المنصة​

platform​

  • النوع: string
  • إلزامي: نعم
  • القيم: iOS | Android

منصة الهاتف المحمول المراد أتمتتها.

platformVersion​

  • النوع: string
  • إلزامي: لا

إصدار نظام التشغيل للجهاز/المحاكي (مثل 17.0 لنظام iOS، 14 لنظام Android).

automationName​

  • النوع: string
  • إلزامي: لا
  • القيم: XCUITest (iOS)، UiAutomator2 | Espresso (Android)

محرك الأتمتة المراد استخدامه. القيمة الافتراضية هي XCUITest لنظام iOS وUiAutomator2 لنظام Android.

خيارات الجهاز​

deviceName​

  • النوع: string
  • إلزامي: نعم

اسم الجهاز أو المحاكي المراد استخدامه.

أمثلة:

  • محاكي iOS: iPhone 15 Pro, iPad Air (5th generation)
  • محاكي Android: Pixel 7, Nexus 5X
  • الجهاز الحقيقي: اسم الجهاز كما يظهر في نظامك

udid​

  • النوع: string
  • إلزامي: لا (مطلوب لأجهزة iOS الحقيقية)

معرف الجهاز الفريد. مطلوب لأجهزة iOS الحقيقية (معرف من 40 حرفًا) وموصى به لأجهزة Android الحقيقية.

للعثور على UDID:

  • iOS: قم بتوصيل الجهاز، افتح Finder/iTunes، انقر على الجهاز → الرقم التسلسلي (انقر للكشف عن UDID)
  • Android: قم بتشغيل adb devices في المحطة الطرفية

خيارات التطبيق​

appPath​

  • النوع: string
  • إلزامي: لا*

مسار ملف التطبيق المراد تثبيته وتشغيله.

الصيغ المدعومة:

  • محاكي iOS: مجلد .app
  • جهاز iOS حقيقي: ملف .ipa
  • Android: ملف .apk

*يجب توفير إما appPath أو noReset: true للاتصال بتطبيق قيد التشغيل بالفعل.

appWaitActivity​

  • النوع: string
  • إلزامي: لا (Android فقط)

النشاط المراد انتظاره عند بدء التطبيق. إذا لم يتم تحديده، سيتم استخدام نشاط التطبيق الرئيسي.

مثال: com.example.app.MainActivity

خيارات حالة الجلسة​

noReset​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: false

الحفاظ على حالة التطبيق بين الجلسات. عندما تكون true:

  • يتم الحفاظ على بيانات التطبيق (حالة تسجيل الدخول، التفضيلات، إلخ.)
  • ستقوم الجلسة بالانفصال بدلاً من الإغلاق (تبقي التطبيق قيد التشغيل)
  • مفيد لاختبار رحلات المستخدم عبر جلسات متعددة
  • يمكن استخدامها بدون appPath للاتصال بتطبيق قيد التشغيل بالفعل

fullReset​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: true

إعادة ضبط التطبيق بالكامل قبل الجلسة. عندما تكون true:

  • iOS: يقوم بإلغاء تثبيت التطبيق وإعادة تثبيته
  • Android: يمسح بيانات التطبيق والذاكرة المؤقتة
  • مفيد للبدء بحالة نظيفة

اضبط fullReset: false مع noReset: true للحفاظ على حالة التطبيق بشكل كامل.

مهلة الجلسة​

newCommandTimeout​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 60

المدة (بالثواني) التي سينتظر فيها Appium أمرًا جديدًا قبل افتراض أن العميل قد أغلق وإنهاء الجلسة. قم بزيادة هذه القيمة لجلسات تصحيح الأخطاء الأطول.

أمثلة:

  • 60 - القيمة الافتراضية، مناسبة لمعظم عمليات الأتمتة
  • 300 - 5 دقائق، لتصحيح الأخطاء أو العمليات الأبطأ
  • 600 - 10 دقائق، للاختبارات طويلة المدة

خيارات المعالجة الآلية​

autoGrantPermissions​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: true

منح أذونات التطبيق تلقائيًا عند التثبيت/التشغيل. عندما تكون true:

  • يتم منح الأذونات تلقائيًا للكاميرا والميكروفون والموقع وما إلى ذلك
  • لا حاجة للتعامل اليدوي مع مربعات حوار الأذونات
  • تبسيط الأتمتة من خلال تجنب النوافذ المنبثقة للأذونات
لنظام Android فقط

يؤثر هذا الخيار بشكل أساسي على Android. يجب التعامل مع أذونات iOS بشكل مختلف بسبب قيود النظام.

autoAcceptAlerts​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: true

قبول تنبيهات النظام (مربعات الحوار) التي تظهر أثناء الأتمتة تلقائيًا.

أمثلة على التنبيهات المقبولة تلقائيًا:

  • "السماح بالإشعارات؟"
  • "يرغب التطبيق في الوصول إلى موقعك"
  • "السماح للتطبيق بالوصول إلى الصور؟"

autoDismissAlerts​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: false

رفض (إلغاء) تنبيهات النظام بدلاً من قبولها. لها الأولوية على autoAcceptAlerts عند تعيينها إلى true.

تجاوز إعدادات خادم Appium​

يمكنك تجاوز اتصال خادم Appium على أساس كل جلسة:

appiumHost​

  • النوع: string
  • إلزامي: لا

اسم مضيف خادم Appium. يتجاوز متغير البيئة APPIUM_URL.

appiumPort​

  • النوع: number
  • إلزامي: لا

منفذ خادم Appium. يتجاوز متغير البيئة APPIUM_URL_PORT.

appiumPath​

  • النوع: string
  • إلزامي: لا

مسار خادم Appium. يتجاوز متغير البيئة APPIUM_PATH.


خيارات اكتشاف العناصر​

خيارات لأداة get_visible_elements.

elementType​

  • النوع: string
  • إلزامي: لا
  • القيمة الافتراضية: interactable
  • القيم: interactable | visual | all

نوع العناصر المراد إرجاعها:

  • interactable: الأزرار والروابط وحقول الإدخال وغيرها من العناصر القابلة للنقر
  • visual: الصور و SVG والعناصر المرئية
  • all: كل من العناصر التفاعلية والمرئية

inViewportOnly​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: true

إرجاع العناصر المرئية فقط ضمن منفذ العرض الحالي. عند تعيينها إلى false، ترجع جميع العناصر في تسلسل العرض (مفيدة للعثور على العناصر خارج الشاشة).

includeContainers​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: false

تضمين عناصر الحاويات/التخطيط في النتائج. عندما تكون true:

حاويات Android المضمنة:

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

حاويات iOS المضمنة:

  • View, StackView, CollectionView
  • ScrollView, TableView

مفيدة لتصحيح مشاكل التخطيط أو فهم تسلسل العرض.

includeBounds​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: false

تضمين حدود/إحداثيات العنصر (x, y, width, height) في الاستجابة. قم بتعيينها إلى true من أجل:

  • التفاعلات المستندة إلى الإحداثيات
  • تصحيح أخطاء التخطيط
  • تحديد موضع العناصر المرئية

خيارات تقسيم الصفحات​

للصفحات الكبيرة ذات العناصر العديدة، استخدم تقسيم الصفحات لتقليل استخدام الرموز:

limit​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 0 (غير محدود)

الحد الأقصى لعدد العناصر المراد إرجاعها.

offset​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 0

عدد العناصر التي يتم تخطيها قبل إرجاع النتائج.

مثال: الحصول على العناصر 21-40:

Get visible elements with limit 20 and offset 20

خيارات شجرة إمكانية الوصول​

خيارات لأداة get_accessibility (للمتصفح فقط).

limit​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 100

الحد الأقصى لعدد العقد المراد إرجاعها. استخدم 0 للحصول على عدد غير محدود (غير موصى به للصفحات الكبيرة).

offset​

  • النوع: number
  • إلزامي: لا
  • القيمة الافتراضية: 0

عدد العقد التي يتم تخطيها لتقسيم الصفحات.

roles​

  • النوع: string[]
  • إلزامي: لا
  • القيمة الافتراضية: كل الأدوار

تصفية أدوار إمكانية الوصول المحددة.

الأدوار الشائعة: button, link, textbox, checkbox, radio, heading, img, listitem

مثال: الحصول على الأزرار والروابط فقط:

Get accessibility tree filtered to button and link roles

namedOnly​

  • النوع: boolean
  • إلزامي: لا
  • القيمة الافتراضية: true

إرجاع العقد التي لها اسم/تسمية فقط. تصفية الحاويات المجهولة وتقليل الضوضاء في النتائج.


خيارات لقطة الشاشة​

خيارات لأداة take_screenshot.

outputPath​

  • النوع: string
  • إلزامي: لا

المسار حيث يتم حفظ ملف لقطة الشاشة. إذا لم يتم توفيره، يتم إرجاع بيانات الصورة المشفرة بـ base64.

التحسين التلقائي​

تتم معالجة لقطات الشاشة تلقائيًا لتحسينها للاستهلاك في نموذج اللغة الكبير (LLM):

التحسينالقيمةالوصف
الحد الأقصى للأبعاد2000 بكسلالصور الأكبر من 2000 بكسل يتم تصغير حجمها
الحد الأقصى لحجم الملف1 ميجابايتيتم ضغط الصور للبقاء أقل من 1 ميجابايت
التنسيقPNG/JPEGPNG مع أقصى ضغط؛ JPEG إذا لزم الأمر للحجم

يضمن هذا التحسين إمكانية معالجة لقطات الشاشة بكفاءة دون تجاوز حدود الرموز.


سلوك الجلسة​

أنواع الجلسات​

يتتبع خادم MCP أنواع الجلسات لتوفير الأدوات والسلوك المناسب:

النوعالوصفالفصل التلقائي
browserجلسة متصفح Chromeلا
iosجلسة تطبيق iOSنعم (إذا كان noReset: true أو لا يوجد appPath)
androidجلسة تطبيق Androidنعم (إذا كان noReset: true أو لا يوجد appPath)

نموذج الجلسة الفردية​

يعمل خادم MCP بنموذج جلسة واحدة:

  • يمكن أن تكون هناك جلسة متصفح واحدة أو جلسة تطبيق واحدة نشطة في وقت واحد
  • بدء جلسة جديدة سيؤدي إلى إغلاق/فصل الجلسة الحالية
  • يتم الحفاظ على حالة الجلسة عالميًا عبر استدعاءات الأدوات

الفصل مقابل الإغلاق​

الإجراءdetach: false (إغلاق)detach: true (فصل)
المتصفحيغلق Chrome تمامًايبقي Chrome قيد التشغيل، يفصل WebDriver
تطبيق الجوالينهي التطبيقيبقي التطبيق قيد التشغيل في الحالة الحالية
حالة الاستخدامحالة نظيفة للجلسة التاليةالحفاظ على الحالة، الفحص اليدوي

اعتبارات الأداء​

تم تحسين خادم MCP للتواصل الفعال مع نموذج اللغة الكبير (LLM) باستخدام تنسيق TOON (Token-Oriented Object Notation)، مما يقلل من استخدام الرموز عند إرسال البيانات إلى Claude.

أتمتة المتصفح​

  • وضع بدون واجهة أسرع ولكنه لا يعرض العناصر المرئية
  • أحجام النوافذ الأصغر تقلل من وقت التقاط لقطة الشاشة
  • اكتشاف العناصر محسّن بتنفيذ نص برمجي واحد
  • تحسين لقطة الشاشة يحافظ على بقاء الصور أقل من 1 ميجابايت للمعالجة الفعالة
  • inViewportOnly: true (افتراضيًا) يصفي العناصر المرئية فقط

أتمتة الأجهزة المحمولة​

  • تحليل مصدر صفحة XML يستخدم 2 من طلبات HTTP فقط (مقابل +600 لاستعلامات العناصر التقليدية)
  • محددات معرف الوصول هي الأسرع والأكثر موثوقية
  • محددات XPath هي الأبطأ - استخدمها فقط كملاذ أخير
  • inViewportOnly: true (افتراضيًا) يقلل بشكل كبير من عدد العناصر
  • تقسيم الصفحات (limit و offset) يقلل من استخدام الرموز للشاشات ذات العناصر العديدة
  • includeBounds: false (افتراضيًا) يحذف بيانات الإحداثيات ما لم تكن هناك حاجة إليها

نصائح استخدام الرموز​

الإعدادالتأثير
inViewportOnly: trueيصفي العناصر خارج الشاشة، مما يقلل من حجم الاستجابة
includeContainers: falseيستبعد عناصر التخطيط (ViewGroup، إلخ)
includeBounds: falseيحذف بيانات x/y/width/height
limit مع تقسيم الصفحاتمعالجة العناصر في دفعات بدلاً من دفعة واحدة
namedOnly: true (إمكانية الوصول)يصفي العقد المجهولة

إعداد خادم Appium​

قبل استخدام أتمتة الأجهزة المحمولة، تأكد من تكوين Appium بشكل صحيح.

الإعداد الأساسي​

# تثبيت Appium عالميًا
npm install -g appium

# تثبيت السائقين
appium driver install xcuitest # iOS
appium driver install uiautomator2 # Android

# بدء الخادم
appium

تكوين خادم مخصص​

# بدء بمضيف ومنفذ مخصصين
appium --address 0.0.0.0 --port 4724

# بدء مع تسجيل
appium --log-level debug

# بدء مع مسار أساسي محدد
appium --base-path /wd/hub

التحقق من التثبيت​

# التحقق من السائقين المثبتة
appium driver list --installed

# التحقق من إصدار Appium
appium --version

# اختبار الاتصال
curl http://localhost:4723/status

استكشاف أخطاء الإعداد وإصلاحها​

خادم MCP لا يبدأ التشغيل​

  1. تحقق من تثبيت npm/npx: npm --version
  2. حاول تشغيله يدويًا: npx @wdio/mcp
  3. تحقق من سجلات Claude Desktop للأخطاء

مشاكل اتصال Appium​

  1. تأكد من تشغيل Appium: curl http://localhost:4723/status
  2. تحقق من تطابق متغيرات البيئة مع إعدادات خادم Appium
  3. تأكد من أن جدار الحماية يسمح بالاتصالات على منفذ Appium

الجلسة لا تبدأ​

  1. المتصفح: تأكد من تثبيت Chrome
  2. iOS: تحقق من توفر Xcode والمحاكيات
  3. Android: تحقق من ANDROID_HOME وتشغيل المحاكي
  4. مراجعة سجلات خادم Appium للحصول على رسائل خطأ مفصلة

انتهاء مهلة الجلسات​

إذا انتهت مهلة الجلسات أثناء تصحيح الأخطاء:

  1. زيادة newCommandTimeout عند بدء الجلسة
  2. استخدم noReset: true للحفاظ على الحالة بين الجلسات
  3. استخدم detach: true عند الإغلاق للحفاظ على تشغيل التطبيق

Welcome! How can I help?

WebdriverIO AI Copilot