Appium هو إطار عمل عبر المنصات لأتمتة اختبار التطبيقات المحمولة والويب وسطح المكتب، مبني على بروتوكول WebDriver. يتيح لك كتابة الاختبارات بأي لغة برمجة وتشغيلها على Android و iOS و Windows دون تغيير الكود. وفقًا لـ Appium Foundation، 2025، يوفر بروتوكول WebDriver واجهة موحدة للتفاعل مع التطبيقات على منصات مختلفة.
الرئيسية
Appium هو إطار عمل مفتوح المصدر لأتمتة اختبار التطبيقات المحمولة، مبني على بنية خادم-عميل. يتلقى خادم Appium الأوامر من العميل عبر بروتوكول WebDriver ويفوضها إلى المشغلات الأصلية: XCUITest لنظام iOS، و UiAutomator2 لنظام Android، و WinAppDriver لنظام Windows.
تم إنشاء Appium في عام 2013 ومنذ ذلك الحين أصبح المعيار الصناعي للاختبار عبر المنصات. يدير المشروع مؤسسة Appium Foundation وتدعمه شركات كبرى: Sauce Labs و HeadSpin و Microsoft. يستخدم Appium أكثر من 500 ألف مختبر حول العالم كل شهر.
يدعم Appium ثلاثة أنواع من التطبيقات: الأصلية (iOS، Android، Windows)، ومتصفحات الويب المحمولة (Safari، Chrome)، والتطبيقات الهجينة (WebView داخل غلاف أصلي). كل نوع يستخدم سياقه الخاص: NATIVE_APP أو WEBVIEW أو CHROMIUM.
تتكون هندسة Appium من أربع طبقات: كود العميل → مكتبة عميل Appium → خادم Appium → المشغل الأصلي. مكتبة العميل تنفذ بروتوكول WebDriver وترسل طلبات HTTP إلى الخادم. يقوم الخادم بتحويلها إلى أوامر المشغل الأصلي للمنصة.
WebDriver هو معيار W3C لأتمتة المتصفحات، تم تكييفه بواسطة Appium للأجهزة المحمولة. كل إجراء — بحث عن عنصر، نقرة، إدخال نص — يتم إرساله كـ طلب HTTP إلى الخادم. على سبيل المثال، POST /session/{id}/element ينشئ جلسة اختبار جديدة.
يبدأ كل اختبار بإنشاء جلسة عبر كائن Desired Capabilities. يحدد: platformName، deviceName، appPath، automationName ومعلمات إضافية. يستخدم Appium هذه البيانات لاختيار المشغل الأصلي المناسب وتكوين الجهاز.
# مثال على Desired Capabilities لنظام Android
desired_caps = {
'platformName': 'Android',
'deviceName': 'Pixel_4',
'app': '/path/to/app.apk',
'automationName': 'UiAutomator2',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
يتم تثبيت Appium عبر npm: npm install -g appium. بعد التثبيت، تحتاج إلى تكوين المشغلات الأصلية لكل منصة: appium driver install xcuitest و appium driver install uiautomator2. أنت بحاجة إلى Xcode لنظام iOS و Android SDK لنظام Android.
Appium Inspector هو أداة رسومية لـ فحص عناصر واجهة المستخدم. يتصل بخادم Appium قيد التشغيل ويظهر تسلسل هرمي لمكونات واجهة المستخدم وخصائصها ومواقعها. يتيح لك Inspector التحقق من المحدد قبل كتابة اختبار.
يبدأ خادم Appium بأمر appium مع معلمات اختيارية: المنفذ، العنوان، التسجيل. افتراضيًا، يستمع الخادم على المنفذ 4723. يتم استخدام منافذ مختلفة أو مجموعات Appium للتشغيل المتوازي على أجهزة متعددة.
# بدء تشغيل خادم Appium مع التسجيل
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
تستخدم اختبارات Appium نمط Page Object لتنظيم الكود. يتم وصف كل شاشة من التطبيق بفئة منفصلة تحتوي على مواقع العناصر وطرق التفاعل. Page Object Model يبسط صيانة الاختبارات عند تغير الواجهة ويعيد استخدام المحددات بين سيناريوهات الاختبار.
يدعم Appium العديد من استراتيجيات البحث عن العناصر: id، xpath، accessibilityId، className، androidUIAutomator و iOSClassChain. الأكثر تفضيلاً هي accessibilityId و id — فهي مستقرة رغم تغيرات التخطيط. يجب استخدام XPath فقط عند عدم توفر مواقع أخرى.
// Page Object لشاشة تسجيل الدخول
public class LoginPage {
private AppiumDriver driver;
private MobileElement emailField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
private MobileElement passwordField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
private MobileElement loginButton =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));
public void login(String email, String password) {
emailField.sendKeys(email);
passwordField.sendKeys(password);
loginButton.click();
}
}
يدعم Appium الإيماءات المعقدة عبر فئة TouchAction أو واجهة برمجة تطبيقات W3C Actions: التمرير، اللمس المتعدد، الضغط المطول، التمرير إلى عنصر. يُنصح باستخدام واجهة برمجة تطبيقات W3C Actions الجديدة للمشاريع الجديدة لأنها موحدة وتعمل بشكل أكثر استقراراً عبر إصدارات المنصات المختلفة.
غالبًا ما يُقارن Appium مع Detox و XCUITest و Espresso. الميزة الرئيسية لـ Appium هي القدرة عبر المنصات: يمكن تشغيل اختبار واحد على iOS و Android دون تغييرات. ومع ذلك، يوفر Detox مزامنة أفضل لـ React Native، بينما يوفر XCUITest/Espresso تنفيذًا أسرع للاختبارات الأصلية.
Appium مناسب للمشاريع التي تتطلب إطار عمل موحدًا لنظامي iOS و Android والويب. لا غنى عنه في الفرق التي يكتب فيها المختبرون بلغة Java أو Python. بالنسبة لمشاريع React Native التي تحتوي على العديد من اختبارات E2E، فكر في Detox بسبب المزامنة التلقائية.
| الإطار | النهج | السرعة | عبر المنصات |
|---|---|---|---|
| Appium | الصندوق الأسود | متوسطة | iOS، Android، Windows |
| Detox | الصندوق الرمادي | عالية | iOS + Android (React Native) |
| XCUITest | الصندوق الأبيض | عالية | iOS فقط |
Appium Grid هو امتداد لتشغيل الاختبارات بالتوازي على أجهزة متعددة في وقت واحد. Appium Grid مبني على Selenium Grid ويسمح بتوزيع الاختبارات عبر خوادم Appium متعددة، كل منها يدير مجموعته الخاصة من الأجهزة أو المحاكيات. هذا أمر بالغ الأهمية للمشاريع الكبيرة حيث يستغرق اختبار الانحدار على جهاز واحد ساعات — يقلل Grid الوقت إلى دقائق تتناسب مع عدد العقد.
يستخدم تكوين Grid ملف تكوين JSON يصف العقد مع الأجهزة. تحدد كل عقدة: منفذ الخادم، قائمة الأجهزة مع المنصة، إصدار نظام التشغيل، والحد الأقصى لعدد الجلسات. Hub يوزع الاختبارات على العقد الحرة، مما يضمن أقصى استفادة من البنية التحتية.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
إذا لم تكن البنية التحتية الخاصة بك للأجهزة متاحة، فهناك خدمات سحابية: Sauce Labs و BrowserStack و LambdaTest. توفر مئات الأجهزة الحقيقية والمحاكيات في السحابة. التكامل مع Appium ضئيل: فقط حدد عنوان URL للمركز السحابي وبيانات الاعتماد في Desired Capabilities بدلاً من localhost.
يدعم Appium التشغيل المتوازي للاختبارات باستخدام TestNG (Java) أو pytest-xdist (Python). التوازي يتطلب منافذ فريدة لكل جلسة وبيانات اختبار معزولة. كل خيط يبدأ جلسة Appium الخاصة به على جهاز أو محاك منفصل. عند استخدام الخدمات السحابية، يكون التوازي تلقائيًا — تقوم المنصة بتوزيع الاختبارات على الأجهزة المتاحة وتحررها بعد الانتهاء.
عند مواجهة مشاكل مع Appium، الخطوة الأولى هي التحقق من سجل الخادم (appium --log-level debug). الأخطاء النموذجية: المنفذ مشغول (حدد منفذًا آخر --port)، إصدار مشغل غير متوافق، عدم وجود Android SDK أو Xcode. لنظام iOS، تأكد من أن WebKitAgent قيد التشغيل ولديه حق الوصول إلى المحاكي.
إذا لم يعثر Appium على عنصر، تحقق من: هل السياق صحيح (NATIVE_APP مقابل WEBVIEW)، هل العنصر مرئي على الشاشة، هل يتطلب تمريرًا، وهل المحدد صحيح. استخدم Appium Inspector للبحث التفاعلي والتحقق من تعبيرات XPath قبل إدراجها في الاختبار. من المفيد أيضًا تمكين انتظار ظهور العنصر عبر WebDriverWait — هذا يحل مشاكل المزامنة مع تحميل واجهة المستخدم البطيء.
إنهاء الجلسات بشكل غير صحيح هو سبب شائع لعدم استقرار اختبارات Appium. أغلق المشغل دائمًا في كتلة finally أو عبر AutoCloseable. في حالة الفشل، استخدم driver.quit() بشكل إجباري. لنظام iOS، تأكد من إعادة تشغيل WebKitAgent (WDA) بين الجلسات، وإلا قد يحدث خطأ في إنشاء الجلسة. لمراقبة حالة الجلسات في CI، من المناسب توصيل إضافة Appium Dashboard التي تعرض حالة جميع الاختبارات قيد التشغيل في الوقت الفعلي.
لتحسين استقرار الاختبارات، استخدم: shouldTerminateApp (إنهاء التطبيق بين الاختبارات)، noReset (الاحتفاظ بالبيانات بين الجلسات)، autoGrantPermissions (السماح التلقائي بحوارات النظام). يُوصى أيضًا بتعطيل الرسوم المتحركة على الجهاز عبر خيارات المطور.
الأسئلة الشائعة
يدعم Appium جميع اللغات الشائعة من خلال مكتبات العميل: Java و Python و JavaScript و Ruby و C# و PHP و Kotlin. كل مكتبة تنفذ نفس بروتوكول WebDriver، مما يسمح بكتابة اختبارات عبر المنصات بأي لغة.
لا، يعمل Appium مع الأجهزة الحقيقية والمحاكيات. لنظام Android تُستخدم محاكيات Android Studio، ولنظام iOS محاكيات Xcode. الأجهزة الحقيقية ضرورية فقط لاختبار وظائف الأجهزة: أجهزة الاستشعار و NFC والكاميرا.
تمت إعادة كتابة Appium 2 بالكامل بهندسة معيارية مع إضافات ومشغلات منفصلة. في Appium 1، كانت جميع المشغلات مدمجة في الخادم. يستخدم Appium 2 أوامر appium driver install لتثبيت المشغلات و appium plugin install للإضافات.
يستخدم Appium استراتيجيات البحث: By.id و By.xpath و By.accessibilityId و By.className و By.androidUIAutomator و By.iOSClassChain. للسرعة، يُوصى باستخدام accessibilityId — فهو مستقر ولا يعتمد على تغييرات التخطيط.
نعم، يدعم Appium اختبار المتصفحات المحمولة — Safari على iOS و Chrome على Android. يتم استخدام سياق WEBVIEW أو CHROMIUM لذلك. تعمل الاختبارات في المتصفح عبر WebDriver القياسي، على غرار Selenium.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا