المتطلبات
على الرغم من أن Astur صُمم ليتجاوز خادم Appium كلياً، إلا أنه يعتمد في جوهره على أدوات المنصات الأصلية المدعومة رسمياً من قِبل Android وiOS.
الأنظمة المدعومة
Section titled “الأنظمة المدعومة”| نظام التشغيل | Android (أجهزة ومحاكيات) | محاكي iOS | جهاز iOS حقيقي |
|---|---|---|---|
| macOS | مدعوم | مدعوم | مدعوم |
| Linux | مدعوم | غير مدعوم | غير مدعوم محلياً |
| Windows | مدعوم | غير مدعوم | غير مدعوم محلياً |
تتطلب الأتمتة المحلية لنظام iOS بيئة تشغيل macOS، وذلك لحصرية أدوات Apple مثل المحاكي، و Xcode، والأوامر (xcrun, simctl, xcodebuild)، وإطار XCTest على هذا النظام.
متطلبات عامة (لكافة المستخدمين)
Section titled “متطلبات عامة (لكافة المستخدمين)”- إصدار Node.js 18 أو ما بعده.
- إصدار npm 9 أو ما بعده.
- إطار Playwright Test (يُثبّت تلقائياً عبر الاعتمادية
@astur-mobile/test). - طرفية (Terminal) تدعم الوصول لأدوات المنصة عبر متغير المسار
PATH.
للتحقق من الجاهزية:
node --versionnpm --versionnpx astur-mobile doctorمتطلبات نظام Android
Section titled “متطلبات نظام Android”- حزمة Android SDK.
- أدوات منصة أندرويد (Android SDK Platform Tools).
- تضمين الأداة
adbضمن متغيرPATH. - توفر محاكي Android واحد على الأقل أو جهاز فعلي متصل عبر USB.
- تفعيل “تصحيح أخطاء USB” (USB debugging) عند العمل على الأجهزة الحقيقية.
إعدادات البيئة الموصى بها:
export ANDROID_HOME="$HOME/Library/Android/sdk"export ANDROID_SDK_ROOT="$ANDROID_HOME"export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"يتوجب على مستخدمي Linux و Windows تعديل المسارات السابقة لتتوافق مع مكان تثبيت Android SDK لديهم.
للتأكد من الإعداد السليم:
adb versionadb devices -lnpx astur-mobile devices --androidمتطلبات نظام iOS
Section titled “متطلبات نظام iOS”كما أشرنا، يتطلب iOS نظام التشغيل macOS. اطلع على الجدول التالي لتحديد متطلباتك؛ علماً أن أتمتة المحاكي لا تتطلب توقيعاً رقمياً من Apple، بعكس الأجهزة الحقيقية.
| المتطلب | محاكي iOS | جهاز حقيقي (iPhone / iPad) |
|---|---|---|
| macOS مع Xcode (مفتوح مسبقاً والموافقة على الشروط) | إلزامي | إلزامي |
أدوات Xcode المساعدة (xcrun, simctl, xcodebuild) |
إلزامي | إلزامي |
| تثبيت بيئة تشغيل المحاكي من داخل Xcode | إلزامي | — |
أداة devicectl (مرفقة مع Xcode) |
— | إلزامي |
| التطبيق المستهدف | ملف بصيغة .app |
ملف بصيغة .ipa (موقّع) |
معرف فريق التطوير لدى Apple (ASTUR_IOS_DEVELOPMENT_TEAM) |
غير إلزامي | إلزامي |
| الوثوق بالجهاز وتفعيل وضع المطور (Developer Mode) | — | إلزامي |
| وكيل XCUITest المرفق | يُبنى ويُشغل تلقائياً بواسطة Astur | يُبنى، ويُوقع، ويُشغل تلقائياً |
لا تتدخل يدوياً لتثبيت الوكيل، فـ Astur يتكفل ببناء مشغل XCUITest بلغة Swift وتنفيذه في كل جلسة اختبار. وعلى الأجهزة الحقيقية يقوم أيضاً بتوقيعه باستخدام بيانات فريقك؛ وهي الخطوة الإضافية الوحيدة مقارنة بالمحاكيات.
للتحقق من أدوات iOS:
xcodebuild -versionxcrun simctl list devices available # استعراض المحاكياتxcrun devicectl list devices # استعراض الأجهزة الحقيقيةnpx astur-mobile devices --iosnpx astur-mobile doctor --verboseقبل البدء بالإعداد، حدد المسار المناسب لطبيعة عملك:
| الغرض | هل أحتاج لبناء التطبيق أولاً؟ | الملف المتوقع | توقيع Apple | أمر التشغيل المرجعي |
|---|---|---|---|---|
| استخدام أداة Inspector أو توليد الكود على محاكي | لا (استخدم التطبيق التجريبي .app) |
Astur.app |
لا | npx astur-mobile codegen --ios --simulator --app ./Astur.app --app-id com.astur.demo |
| اختبار تطبيقي الخاص على محاكي | نعم | التطبيق بصيغة .app |
لا | عيّن app.path في الإعدادات وشغّل npx astur-mobile test |
| الاختبار على جهاز فعلي | نعم | التطبيق بصيغة .ipa (موقع) |
نعم (عبر ASTUR_IOS_DEVELOPMENT_TEAM) |
npx astur-mobile codegen --ios --real --device <device-udid> --app ./MyApp.ipa --app-id com.example.myapp |
لتبسيط البداية، ننصح بالاعتماد على التطبيق التجريبي (
Astur.appأوastur.demo.ios.ipaبمعرفcom.astur.demo) المتاح ضمن أمثلة المستودع لتجربة الأتمتة قبل الخوض في إعداد تطبيقك الخاص.
الفارق الأبرز يكمن في نوع الملف المستهدف: المحاكي يعتمد على ملفات .app، بينما تحتاج الأجهزة الحقيقية إلى .ipa.
Astur يغنيك عن تجهيز خادم Appium المستقل أو ربط WebDriver وتثبيت XCTest بشكل يدوي؛ حيث يقوم آلياً بتجميع وكيل XCUITest المبرمج بـ Swift وتشغيله عند الحاجة.
إذا حاولت التشغيل بواسطة --app-id دون تحديد مسار التطبيق ولم يكن مثبتاً سلفاً، سينتهي الأمر بالخطأ IOS_APP_NOT_INSTALLED. لذا، أضف خيار --app متبوعاً بمسار تطبيقك في الجلسة الأولى ليتمكن الإطار من تنصيبه بسلاسة.
إضافة إلى ذلك، يلزمك في الأجهزة الحقيقية:
- ربط حساب Apple Developer داخل Xcode.
- جهاز موصول بالـ USB وموثوق.
- تفعيل “وضع المطور” على الجهاز.
- ملف تطبيق موقع لنفس الجهاز.
- تحديد
ASTUR_IOS_DEVELOPMENT_TEAMليطابق معرف فريقك.
إعدادات البيئة المقترحة لجهاز فعلي:
export ASTUR_IOS_DEVELOPMENT_TEAM=ABCDE12345# يُستخدم فقط للضرورة إن فشل الهاتف في التعرف على الجسر المحلي.export ASTUR_IOS_AGENT_HOST=192.168.0.14المحاكيات معفاة من إضافة ASTUR_IOS_DEVELOPMENT_TEAM وشهادات Apple.
على الرغم من قيام Astur بالتوقيع نيابة عنك، تفرض Apple جلب الاعتمادات من جهازك المحلي أو بيئة (CI). إذا كنت تختبر مباشرة من مصدر المشروع وكان معداً في Xcode، سيتمكن Astur من سحب بيانات التوقيع آلياً. خلاف ذلك، ستحتاج لتعيين ASTUR_IOS_DEVELOPMENT_TEAM.
يتم الاتصال عادةً بالأجهزة عبر منفذ CoreDevice. لذا، تجاوز تعيين ASTUR_IOS_AGENT_HOST ما لم يكن من الضروري توجيه الجهاز لعنوان شبكة محدد لجهاز الـ Mac.
التحكم بعناصر الويب (WebView) في iOS (خطوة إضافية)
Section titled “التحكم بعناصر الويب (WebView) في iOS (خطوة إضافية)”تعتبر هذه الخطوة ضرورية فقط إذا رغبت بالتحكم الصريح في عناصر DOM لمحتوى الـ WebView عبر (device.webContext() / webview()) على نظام iOS. أما التفاعل مع المحددات الأصلية في صفحات الـ WebView فلا يتطلب أي إعداد إضافي.
- تثبيت الأداة المساعدة
brew install ios-webkit-debug-proxy(إصدار 1.9 فأعلى). - التأكد من إدراج الخيار
WKWebView.isInspectable = trueفي الكود المصدري للتطبيق (متاح للإصدار iOS 16.4 وأحدث). - للأجهزة الحقيقية: اذهب إلى الإعدادات > Safari > متقدم، وفعّل “Web Inspector”.
يدعم هذا النظام كلا من الأجهزة الحقيقية والمحاكيات مع قدرة Astur على اكتشاف منفذ Web Inspector آلياً.
متطلبات التشغيل لتطبيقات Flutter
Section titled “متطلبات التشغيل لتطبيقات Flutter”يدير Astur اختبار تطبيقات Flutter دون وساطة Appium ودون الحاجة لمشغل خارجي:
- نظام Android: وجه إعداداتك لملف APK من نوع debug (أو profile)، نظراً لافتقار إصدارات release لخدمة Dart VM. ستحتاج كذلك لتوافر أداة
flutterفي المتغيرPATH(أوASTUR_FLUTTER_PATH) مع تعيين المسار الرئيسي لمشروعك عبر المتغيرASTUR_FLUTTER_PROJECT. - نظام iOS: تُفحص الواجهة من خلال شجرة الوصول المدعومة في XCUITest (بسبب غياب Dart VM). وفر تطبيق
Runner.appمُعدّاً للمحاكي وتأكد من تفعيل خواص الوصول (semantics) حتى يتسنى قراءة التسميات. - يوصى باستخدام معرفات ثابتة على شكل
Semantics(identifier: 'login-email-input')لتمكينgetById()من التعرف عليها؛ حيث تعمل الأوامرgetByTextوgetByLabelبالاعتماد على النصوص المرئية وتسميات العناصر.
للمزيد من الإرشادات المفصلة حول أطر العمل، راجع الدليل المخصص في Flutter و React Native وكذلك قسم حدود المنصات لفهم الاختلافات التقنية.
قيود النسخة التجريبية الحالية
Section titled “قيود النسخة التجريبية الحالية”- تعتمد الأتمتة الأساسية على نظام Android على وكيل Kotlin UIAutomator، ليتولى فحص الشجرة الحية، وإدارة المحددات، والانتظار، والتحكم بلوحة المفاتيح.
- يحتفظ ADB بصلاحياته على نظام Android في إجراءات دورة حياة التطبيق، مثل: التثبيت، والتشغيل، وتمرير المنافذ، وجمع السجلات واللقطات المرئية.
- المسار البديل (ADB/UIAutomator XML) ما زال متاحاً لأغراض الانتقال، إلا أنه لم يعد المسار الأساسي.
- تُجرى أتمتة الـ DOM لتطبيقات WebView في Android بالاعتماد على “Chrome DevTools Protocol” بمجرد تفعيل المُطور لخيار التصحيح.
- تستند أتمتة iOS، في كل من المحاكي والجهاز الفعلي، إلى وكيل XCUITest المبني بلغة Swift.
- تستخدم محاكيات iOS أمر
simctl، بينما تعتمد الأجهزة الحقيقية على أمرdevicectlفي مهام الإدارة الأساسية. - الأجهزة الحقيقية في iOS تلزم مطوريها بتوقيع التطبيقات يدوياً عبر
ASTUR_IOS_DEVELOPMENT_TEAM. - تخضع الأذونات المتقدمة في الأجهزة الحقيقية لنظام iOS لقيود منصات Apple العامة؛ ما يفرض الاعتماد على تقنية “إعادة التثبيت” لمسح البيانات أو الاعتماد على التوافر. إذا لم يتوفر التسجيل الأصلي سيُرفق تحذير بدلاً من إفشال الاختبار.
- تتطلب أتمتة الـ DOM عبر
WKWebViewفي iOS أداةios-webkit-debug-proxyوتفعيل التصحيح كلياً في كود التطبيق، بينما تظل المحددات الأصلية فاعلة ومستقلة.
إعدادات إضافية اختيارية (نقطة اتصال الوكيل)
Section titled “إعدادات إضافية اختيارية (نقطة اتصال الوكيل)”بفضل مرونة Astur، تُدار كافة الوكلاء في البيئة المحلية بصورة ذاتية، ولا يستلزم تخصيص نقطة اتصال إلا إذا كنت تدير وكيل المنصة بنفسك في بيئة تشغيل مفصولة.
- تأمين الوصول لنقطة اتصال مرتبطة بوكيل المنصة المطلوبة.
- تحديد الوكيل المتوافق بناءً على المنصة (مثلاً نقطة اتصال
androidللاختبار على الأندرويد، وهكذا). - تخصيص أوقات المهلة (Timeouts) بما يخدم بيئة الشبكة لديك متى دعت الحاجة.
إليك كيفية ضبط المتغيرات:
export ASTUR_ANDROID_AGENT_ENDPOINT=tcp:127.0.0.1:8787export ASTUR_IOS_AGENT_ENDPOINT=http://127.0.0.1:8788السياسة الافتراضية لمنصات التشغيل تعتمد على منهج “الوكيل أولاً”:
- نظام Android:
automation.engine: 'agent',agent.mode: 'required',legacyFallback: 'never',startupTimeoutMs: 30_000,commandTimeoutMs: 20_000 - نظام iOS:
automation.engine: 'agent',agent.mode: 'required',legacyFallback: 'never',startupTimeoutMs: 60_000,commandTimeoutMs: 15_000
إذا رغبت في العودة للمسار الأقدم ADB/UIAutomator، يمكنك تعيين automation.engine: 'auto'. ويظل الخيار لك لتخصيص هذه القيم من خلال use.astur.automation أو use.astur.agent ضمن ملف الإعدادات؛ على الرغم من أن السلوك الافتراضي يعد كافياً ومناسباً للغالبية العظمى من المشاريع.

