Appium ایک کراس پلیٹ فارم فریم ورک ہے جو موبائل، ویب اور ڈیسک ٹاپ ایپلیکیشنز کے ٹیسٹنگ کو خودکار بنانے کے لیے WebDriver پروٹوکول پر مبنی ہے۔ یہ آپ کو کسی بھی پروگرامنگ زبان میں ٹیسٹ لکھنے اور کوڈ تبدیل کیے بغیر Android، iOS اور Windows پر چلانے کی اجازت دیتا ہے۔ Appium Foundation، 2025 کے مطابق، WebDriver پروٹوکول مختلف پلیٹ فارمز پر ایپلیکیشنز کے ساتھ تعامل کے لیے ایک متحد انٹرفیس فراہم کرتا ہے۔
اہم نکات
Appium ایک اوپن سورس فریم ورک ہے جو موبائل ایپلیکیشن ٹیسٹنگ کو خودکار بنانے کے لیے کلائنٹ-سرور فن تعمیر پر بنایا گیا ہے۔ Appium سرور کلائنٹ سے WebDriver پروٹوکول کے ذریعے کمانڈ وصول کرتا ہے اور انہیں مقامی ڈرائیوروں کو سونپتا ہے: iOS کے لیے XCUITest، Android کے لیے UiAutomator2 اور Windows کے لیے WinAppDriver۔
Appium 2013 میں بنایا گیا تھا اور تب سے یہ کراس پلیٹ فارم ٹیسٹنگ کے لیے صنعتی معیار بن گیا ہے۔ پروجیکٹ کا انتظام Appium Foundation کرتا ہے اور بڑی کمپنیاں اس کی حمایت کرتی ہیں: Sauce Labs، HeadSpin، Microsoft۔ دنیا بھر میں ہر ماہ 500 ہزار سے زیادہ ٹیسٹرز Appium استعمال کرتے ہیں۔
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 مناسب مقامی ڈرائیور اور ڈیوائس کنفیگریشن منتخب کرنے کے لیے اس ڈیٹا کا استعمال کرتا ہے۔
# Android کے لیے Desired Capabilities کی مثال
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۔ iOS کے لیے Xcode اور Android کے لیے Android SDK ضروری ہے۔
Appium Inspector یوزر انٹرفیس عناصر کے معائنہ کے لیے ایک گرافیکل ٹول ہے۔ یہ چلنے والے Appium سرور سے جڑتا ہے اور UI اجزاء کا درجہ بندی، ان کی خصوصیات اور لوکیٹر دکھاتا ہے۔ 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 API کے ذریعے پیچیدہ اشاروں کو سپورٹ کرتا ہے: سوائپ، ملٹی ٹچ، لمبا دباؤ، عنصر تک اسکرول۔ نئی W3C Actions API نئے پروجیکٹس کے لیے تجویز کی جاتی ہے کیونکہ یہ معیاری ہے اور مختلف پلیٹ فارم ورژنز پر زیادہ مستحکم کام کرتی ہے۔
Appium کا اکثر Detox، XCUITest اور Espresso سے موازنہ کیا جاتا ہے۔ Appium کا بنیادی فائدہ کراس پلیٹ فارم صلاحیت ہے: ایک ٹیسٹ بغیر تبدیلی کے iOS اور Android پر چلایا جا سکتا ہے۔ تاہم، Detox React Native کے لیے بہتر ہم آہنگی فراہم کرتا ہے، اور XCUITest/Espresso مقامی ٹیسٹوں کے لیے تیز تر عملدرآمد فراہم کرتے ہیں۔
Appium ان پروجیکٹس کے لیے موزوں ہے جنہیں iOS، Android اور ویب کے لیے ایک ہی فریم ورک کی ضرورت ہوتی ہے۔ یہ ان ٹیموں میں ناگزیر ہے جہاں ٹیسٹر Java یا Python میں لکھتے ہیں۔ بہت سے E2E ٹیسٹ والے React Native پروجیکٹس کے لیے، خودکار ہم آہنگی کی وجہ سے Detox پر غور کریں۔
| فریم ورک | طریقہ | رفتار | کراس پلیٹ فارم |
|---|---|---|---|
| Appium | بلیک باکس | درمیانی | iOS، Android، Windows |
| Detox | گرے باکس | تیز | iOS + Android (React Native) |
| XCUITest | وائٹ باکس | تیز | صرف iOS |
Appium Grid ایک سے زیادہ آلات پر بیک وقت متوازی ٹیسٹ چلانے کے لیے ایک توسیع ہے۔ Appium Grid Selenium Grid پر بنایا گیا ہے اور ایک سے زیادہ Appium سرورز کے درمیان ٹیسٹ تقسیم کرنے کی اجازت دیتا ہے، ہر ایک اپنے آلات یا ایمولیٹر کے سیٹ کا انتظام کرتا ہے۔ یہ بڑے پروجیکٹس کے لیے اہم ہے جہاں ایک ہی ڈیوائس پر ریگریشن ٹیسٹنگ میں گھنٹے لگتے ہیں — Grid وقت کو نوڈس کی تعداد کے تناسب سے منٹوں تک کم کر دیتا ہے۔
Grid کی ترتیب آلات کے ساتھ نوڈس کو بیان کرنے والی JSON کنفیگریشن فائل استعمال کرتی ہے۔ ہر نوڈ متعین کرتا ہے: سرور پورٹ، پلیٹ فارم کے ساتھ آلات کی فہرست، OS ورژن اور زیادہ سے زیادہ سیشنز کی تعداد۔ Hub خالی نوڈس پر ٹیسٹ تقسیم کرتا ہے، زیادہ سے زیادہ انفراسٹرکچر استعمال کو یقینی بناتا ہے۔
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
اگر آپ کا اپنا ڈیوائس انفراسٹرکچر دستیاب نہیں ہے، تو کلاؤڈ سروسز موجود ہیں: Sauce Labs، BrowserStack، LambdaTest۔ یہ کلاؤڈ میں سینکڑوں حقیقی آلات اور ایمولیٹر فراہم کرتی ہیں۔ Appium کے ساتھ انضمام کم سے کم ہے: بس localhost کی بجائے Desired Capabilities میں کلاؤڈ ہب URL اور اسناد بتائیں۔
Appium TestNG (Java) یا pytest-xdist (Python) کا استعمال کرتے ہوئے متوازی ٹیسٹ عملدرآمد کو سپورٹ کرتا ہے۔ متوازی کاری کے لیے ہر سیشن کے لیے منفرد پورٹس اور الگ تھلگ ٹیسٹ ڈیٹا کی ضرورت ہوتی ہے۔ ہر تھریڈ ایک علیحدہ ڈیوائس یا ایمولیٹر پر اپنا Appium سیشن شروع کرتا ہے۔ کلاؤڈ سروسز استعمال کرتے وقت، متوازی کاری خودکار ہے — پلیٹ فارم دستیاب آلات پر ٹیسٹ تقسیم کرتا ہے اور مکمل ہونے کے بعد انہیں خالی کر دیتا ہے۔
Appium کے ساتھ مسائل کا سامنا کرنے پر، پہلا قدم سرور لاگ (appium --log-level debug) چیک کرنا ہے۔ عام غلطیاں: پورٹ مصروف (دوسرا --port بتائیں)، متضاد ڈرائیور ورژن، Android SDK یا Xcode کا فقدان۔ iOS کے لیے، یقینی بنائیں کہ WebKitAgent چل رہا ہے اور اسے سمیلیٹر تک رسائی ہے۔
اگر Appium کو عنصر نہیں ملتا ہے، تو چیک کریں: کیا سیاق و سباق درست ہے (NATIVE_APP بمقابلہ WEBVIEW)، کیا عنصر اسکرین پر نظر آتا ہے، کیا اسے اسکرولنگ کی ضرورت ہے، اور کیا لوکیٹر درست ہے۔ ٹیسٹ میں ڈالنے سے پہلے انٹرایکٹو تلاش اور XPath اظہار کی جانچ کے لیے Appium Inspector استعمال کریں۔ WebDriverWait کے ذریعے عنصر کی نمائش کے انتظار کو فعال کرنا بھی مددگار ہے — یہ سست UI لوڈنگ کے ساتھ ہم آہنگی کے مسائل حل کرتا ہے۔
نا مناسب سیشن ختم کرنا 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 موبائل براؤزرز کی جانچ کو سپورٹ کرتا ہے — iOS پر Safari اور Android پر Chrome۔ اس کے لیے WEBVIEW یا CHROMIUM سیاق و سباق استعمال ہوتا ہے۔ ٹیسٹ Selenium کی طرح معیاری WebDriver کے ذریعے براؤزر میں چلتے ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں