Appium — چیست، اصول کار و تست بین‌پلتفرمی

نویسنده: IT Sectr منتشر شده: 2026-04-09 زمان مطالعه: 8 دقیقه

Appium یک فریم‌ورک بین‌پلتفرمی برای خودکارسازی تست اپلیکیشن‌های موبایل، وب و دسکتاپ است که بر پایه پروتکل WebDriver ساخته شده است. این امکان را فراهم می‌کند تا تست‌ها را به هر زبان برنامه‌نویسی بنویسید و بدون تغییر کد در Android، iOS و Windows اجرا کنید. به گزارش Appium Foundation, 2025، پروتکل WebDriver یک رابط یکپارچه برای تعامل با اپلیکیشن‌ها در پلتفرم‌های مختلف فراهم می‌کند.

نکات اصلی

  • Appium — فریم‌ورک بین‌پلتفرمی برای خودکارسازی تست مبتنی بر WebDriver
  • API یکپارچه امکان نوشتن تست به زبان‌های Java, Python, JavaScript, Ruby, C# و دیگر زبان‌ها
  • پشتیبانی از پلتفرم‌ها شامل iOS, Android, Windows و اپلیکیشن‌های وب
  • رویکرد Black-box نیاز به دسترسی به کد منبع اپلیکیشن ندارد
  • Appium Server به عنوان پروکسی بین تست و درایور بومی پلتفرم عمل می‌کند

Appium چیست

Appium یک فریم‌ورک متن‌باز برای خودکارسازی تست اپلیکیشن‌های موبایل است که بر معماری کلاینت-سرور ساخته شده است. سرور Appium دستورات را از کلاینت از طریق پروتکل WebDriver دریافت می‌کند و به درایورهای بومی واگذار می‌کند: XCUITest برای iOS، UiAutomator2 برای Android و WinAppDriver برای Windows.

تاریخچه و جامعه

Appium در سال ۲۰۱۳ ایجاد شد و از آن زمان به استاندارد صنعتی برای تست بین‌پلتفرمی تبدیل شده است. این پروژه توسط Appium Foundation مدیریت می‌شود و توسط شرکت‌های بزرگ پشتیبانی می‌شود: Sauce Labs، HeadSpin، Microsoft. ماهانه بیش از ۵۰۰ هزار تستر در سراسر جهان از Appium استفاده می‌کنند.

انواع اپلیکیشن‌های پشتیبانی شده

Appium از سه نوع اپلیکیشن پشتیبانی می‌کند: بومی (iOS, Android, Windows)، مرورگرهای وب موبایل (Safari, Chrome) و اپلیکیشن‌های هیبریدی (WebView درون پوسته بومی). هر نوع از کانتکست خود استفاده می‌کند: NATIVE_APP، WEBVIEW یا CHROMIUM.

معماری Appium و WebDriver

معماری Appium از چهار لایه تشکیل شده است: کد کلاینت → Appium Client Library → Appium Server → درایور بومی. کتابخانه کلاینت پروتکل WebDriver را پیاده‌سازی می‌کند و درخواست‌های HTTP را به سرور ارسال می‌کند. سرور آنها را به دستورات درایور بومی پلتفرم تبدیل می‌کند.

پروتکل WebDriver

WebDriver استاندارد W3C برای خودکارسازی مرورگرها است که توسط Appium برای دستگاه‌های موبایل تطبیق داده شده است. هر اقدام — جستجوی عنصر، کلیک، وارد کردن متن — به عنوان درخواست HTTP به سرور ارسال می‌شود. برای مثال POST /session/{id}/element یک جلسه تست جدید ایجاد می‌کند.

جلسات و Desired Capabilities

هر تست با ایجاد یک جلسه از طریق شی Desired Capabilities شروع می‌شود. در آن مشخص می‌شود: platformName, deviceName, appPath, automationName و پارامترهای اضافی. Appium از این داده‌ها برای انتخاب درایور بومی مناسب و پیکربندی دستگاه استفاده می‌کند.

python
# نمونه 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

نصب Appium از طریق npm انجام می‌شود: npm install -g appium. پس از نصب باید درایورهای بومی برای هر پلتفرم پیکربندی شوند: appium driver install xcuitest و appium driver install uiautomator2. برای کار با iOS به Xcode و برای Android به Android SDK نیاز است.

Appium Inspector

Appium Inspector یک ابزار گرافیکی برای بازرسی عناصر رابط کاربری است. این ابزار به سرور Appium در حال اجرا متصل می‌شود و سلسله‌مراتب کامپوننت‌های UI، ویژگی‌ها و مکان‌یاب‌های آنها را نشان می‌دهد. Inspector امکان بررسی سلکتور را قبل از نوشتن تست فراهم می‌کند.

راه‌اندازی سرور

سرور Appium با دستور appium با پارامترهای اختیاری راه‌اندازی می‌شود: پورت، آدرس، لاگ‌گیری. به طور پیش‌فرض سرور به پورت ۴۷۲۳ گوش می‌دهد. برای اجرای همزمان چندین دستگاه از پورت‌های مختلف یا کلاسترهای Appium استفاده می‌شود.

bash
# راه‌اندازی سرور Appium با لاگ‌گیری
appium \
  --port 4723 \
  --log-level debug \
  --use-plugins images \
  --base-path /wd/hub

نوشتن تست در Appium

تست‌های Appium از الگوی Page Object برای سازماندهی کد استفاده می‌کنند. هر صفحه از اپلیکیشن با یک کلاس جداگانه با مکان‌یاب‌های عناصر و روش‌های تعامل توصیف می‌شود. مدل Page Object نگهداری تست‌ها را هنگام تغییر رابط کاربری آسان‌تر می‌کند و سلکتورها را بین سناریوهای تست بازاستفاده می‌کند.

مکان‌یاب‌های عناصر

Appium از استراتژی‌های متعدد جستجوی عناصر پشتیبانی می‌کند: id, xpath, accessibilityId, className, androidUIAutomator و iOSClassChain. accessibilityId و id ترجیح داده می‌شوند — آنها در تغییرات چیدمان پایدار هستند. XPath فقط در صورت نبودن مکان‌یاب‌های دیگر استفاده شود.

java
// 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 API پشتیبانی می‌کند: سوایپ‌ها، چندلمسی، فشار طولانی، اسکرول به عنصر. W3C Actions API جدید برای پروژه‌های جدید توصیه می‌شود زیرا استاندارد شده و در نسخه‌های مختلف پلتفرم‌ها پایدارتر عمل می‌کند.

مقایسه Appium با جایگزین‌ها

Appium اغلب با Detox، XCUITest و Espresso مقایسه می‌شود. مزیت اصلی Appium بین‌پلتفرمی بودن است: یک تست را می‌توان بدون تغییر در iOS و Android اجرا کرد. با این حال Detox همگام‌سازی بهتری برای React Native فراهم می‌کند و XCUITest/Espresso اجرای سریع‌تری برای تست‌های بومی دارند.

زمان انتخاب Appium

Appium برای پروژه‌هایی مناسب است که به یک فریم‌ورک یکپارچه برای iOS, Android و وب نیاز دارند. برای تیم‌هایی که تسترهای آنها به Java یا Python می‌نویسند ضروری است. برای پروژه‌های React Native با تعداد زیاد تست‌های E2E بهتر است Detox را به دلیل همگام‌سازی خودکار در نظر بگیرید.

فریم‌ورکرویکردسرعتبین‌پلتفرمی
AppiumBlack-boxمتوسطiOS, Android, Windows
DetoxGray-boxبالاiOS + Android (React Native)
XCUITestWhite-boxبالافقط iOS

Appium Grid و تست ابری

Appium Grid یک افزونه برای اجرای همزمان تست‌ها روی چندین دستگاه است. Appium Grid بر اساس Selenium Grid ساخته شده است و امکان توزیع تست‌ها بین چندین سرور Appium را فراهم می‌کند که هر کدام مجموعه‌ای از دستگاه‌ها یا شبیه‌سازها را مدیریت می‌کند. این برای پروژه‌های بزرگی که اجرای رگرسیون روی یک دستگاه ساعت‌ها طول می‌کشد حیاتی است — Grid زمان را به نسبت تعداد گره‌ها به دقایق کاهش می‌دهد.

پیکربندی Grid

برای پیکربندی Grid از یک فایل پیکربندی در قالب JSON استفاده می‌شود که در آن گره‌ها (nodes) با دستگاه‌ها توصیف می‌شوند. هر گره مشخص می‌کند: پورت سرور، لیست دستگاه‌ها با پلتفرم، نسخه سیستم‌عامل و حداکثر تعداد جلسات. Hub تست‌ها را بین گره‌های آزاد توزیع می‌کند و حداکثر استفاده از زیرساخت را تضمین می‌کند.

json
{
  "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، اولین مرحله بررسی لاگ سرور است (appium --log-level debug). خطاهای معمول: پورت مشغول است (--port دیگری مشخص کنید)، نسخه ناسازگار درایور، عدم وجود Android SDK یا Xcode. برای iOS مطمئن شوید WebKitAgent در حال اجرا است و به شبیه‌ساز دسترسی دارد.

مشکلات جستجوی عناصر

اگر Appium عنصری را پیدا نمی‌کند، بررسی کنید: آیا کانتکست درست است (NATIVE_APP vs WEBVIEW)، آیا عنصر روی صفحه قابل مشاهده است، آیا نیاز به اسکرول دارد و آیا مکان‌یاب درست است. از Appium Inspector برای جستجوی تعاملی و بررسی عبارات XPath قبل از درج در تست استفاده کنید. همچنین فعال‌سازی انتظار برای ظاهر شدن عنصر از طریق WebDriverWait مفید است — این مشکل همگام‌سازی هنگام بارگذاری آهسته UI را حل می‌کند.

مدیریت جلسات

پایان نادرست جلسات علت رایج ناپایداری تست‌های Appium است. همیشه درایور را در بلوک finally یا از طریق AutoCloseable ببندید. در صورت خطا از driver.quit() اجباری استفاده کنید. برای iOS مطمئن شوید WebKitAgent (WDA) بین جلسات راه‌اندازی مجدد می‌شود، در غیر این صورت ممکن است خطای session not created رخ دهد. برای نظارت بر وضعیت جلسات در CI، افزودن پلاگین Appium Dashboard مفید است که وضعیت همه تست‌های در حال اجرا را در زمان واقعی نمایش می‌دهد.

پرچم‌های پایداری

برای افزایش پایداری تست‌ها از موارد زیر استفاده کنید: shouldTerminateApp (خاتمه اپلیکیشن بین تست‌ها)، noReset (ذخیره داده‌ها بین جلسات)، autoGrantPermissions (اعطای خودکار مجوزهای سیستم). همچنین توصیه می‌شود انیمیشن‌ها را در دستگاه از طریق Developer Options غیرفعال کنید.

پرسش‌های متداول

Appium از چه زبان‌های برنامه‌نویسی پشتیبانی می‌کند؟

Appium از همه زبان‌های محبوب از طریق کتابخانه‌های کلاینت پشتیبانی می‌کند: Java, Python, JavaScript, Ruby, C#, PHP و Kotlin. هر کتابخانه همان پروتکل WebDriver را پیاده‌سازی می‌کند که امکان نوشتن تست‌های بین‌پلتفرمی به هر زبانی را فراهم می‌کند.

آیا برای Appium به تلفن واقعی نیاز است؟

خیر، Appium هم با دستگاه‌های واقعی و هم با شبیه‌سازها کار می‌کند. برای Android از شبیه‌سازهای Android Studio و برای iOS از شبیه‌سازهای Xcode استفاده می‌شود. دستگاه‌های واقعی فقط برای تست عملکردهای سخت‌افزاری لازم هستند: سنسورها، NFC، دوربین.

تفاوت بین Appium 1 و Appium 2 چیست؟

Appium 2 کاملاً با معماری ماژولار با پلاگین‌ها و درایورهای جداگانه بازنویسی شده است. در Appium 1 همه درایورها در سرور تعبیه شده بودند. Appium 2 از دستورات appium driver install برای نصب درایورها و appium plugin install برای پلاگین‌ها استفاده می‌کند.

Appium چگونه عناصر را روی صفحه پیدا می‌کند؟

Appium از استراتژی‌های جستجو استفاده می‌کند: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator و By.iOSClassChain. برای سرعت بیشتر توصیه می‌شود از accessibilityId استفاده کنید — پایدار است و به تغییرات چیدمان وابسته نیست.

آیا می‌توان اپلیکیشن‌های وب را در Appium تست کرد؟

بله، Appium از تست مرورگرهای موبایل پشتیبانی می‌کند — Safari در iOS و Chrome در Android. برای این کار از کانتکست WEBVIEW یا CHROMIUM استفاده می‌شود. تست‌ها در مرورگر از طریق WebDriver استاندارد، مشابه Selenium، اجرا می‌شوند.

خلاصه

  • Appium — فریم‌ورک بین‌پلتفرمی E2E مبتنی بر WebDriver با پشتیبانی از iOS, Android و Windows
  • معماری کلاینت-سرور امکان نوشتن تست به زبان‌های Java, Python, JavaScript, Ruby و C#
  • Desired Capabilities جلسه تست را برای پلتفرم و دستگاه خاص پیکربندی می‌کند
  • مدل Page Object برای سازماندهی کد تست و بازاستفاده سلکتورها توصیه می‌شود
  • Appium Inspector به بازرسی عناصر رابط و انتخاب مکان‌یاب‌ها کمک می‌کند
  • رویکرد Black-box نیاز به دسترسی به کد منبع اپلیکیشن ندارد
  • Appium 2 از معماری ماژولار با درایورها و پلاگین‌های قابل نصب استفاده می‌کند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید