تخطَّ إلى المحتوى

البنية الأساسية

يحافظ Astur على بساطة تجربة كتابة الاختبارات، بينما ينقل المهام الثقيلة والمعقدة الخاصة بالجوال إلى وكلاء المنصات الأصليين.

اختبار المستخدم@astur-mobile/test
بيئة التشغيل الأساسيةالمحددات، الانتظار، والتأكيدات
البروتوكولالمحددات والأوامر
Android
مشغل Androidإدارة دورة الحياة عبر ADB
وكيل UIAutomatorتنفيذ البحث والإجراءات بشكل أصلي
تطبيق Androidالتطبيق قيد الاختبار
iOS
مشغل iOSإدارة دورة الحياة عبر simctl و xcodebuild
وكيل XCUITestتنفيذ البحث والإجراءات بشكل أصلي
تطبيق iOSالتطبيق قيد الاختبار

بينما تظل واجهة المستخدم العامة بأسلوب Playwright:

await device.getByRole('button', { name: 'Sign in' }).tap();
await expect(device.getByText('Welcome')).toBeVisible();

خلف الكواليس، تتولى بيئة التشغيل كافة التفاصيل: بدءاً من اختيار الجهاز، وإدارة دورة حياة التطبيق، والبحث عن العناصر باستخدام المحددات الأصلية، وصولاً إلى التحقق من إمكانية تنفيذ الإجراءات (actionability checks)، ومعالجة الإيماءات، والتقاط الصور وتسجيل الفيديو، وتتبع العمليات، بالإضافة إلى دعم أداة Inspector وتوليد الكود التلقائي.

يحتفظ الملف المصدري docs/architecture.md بمخططات Mermaid لزوار المستودع. أما الوثائق العامة المبنية بـ Astro فتستخدم نسخة معدلة بالـ MDX/CSS لنفس المخطط، نظراً لأن Starlight لا يدعم تصيير كتل Mermaid افتراضياً دون إضافات.

سرعة الأداء: ما هو السر؟

Section titled “سرعة الأداء: ما هو السر؟”

تضيف الأطر التقليدية المبنية على طراز Appium خادم WebDriver ليكون وسيطاً بين اختبارك وإطار عمل الأتمتة الأصلي. أما Astur، فيتجاوز هذه الطبقة الإضافية من ترجمة البروتوكولات تماماً.

1يقوم الاختبار باستدعاء getByLabel("Login").tap()
2يرسل Astur أمراً أصلياً واحداً يتضمن: ابحث، انتظر، وانقر
3يتولى وكيل المنصة معالجة الأمر وتنفيذه محلياً
4يستلم Astur نتيجة مختصرة تتضمن بيانات التوقيت والتشخيص

في الإجراءات المعتادة، يُرسل Astur الأمر مرة واحدة، ليتكفل وكيل المنصة بتحليله وتنفيذه محلياً، مما يغني المضيف عن الحاجة لتحميل أشجار ضخمة لواجهة المستخدم مراراً وتكراراً لمجرد إعادة المحاولة على محدد عنصر.

التوازن بين دورة الحياة وتفاعل العناصر

Section titled “التوازن بين دورة الحياة وتفاعل العناصر”

يستخدم Astur أدوات كل منصة عندما تكون هي الخيار الأنسب:

  • دورة حياة Android: يُستخدم adb لتثبيت التطبيقات، تشغيل الحزم، التقاط الصور، تسجيل الفيديو، وجمع سجلات الأخطاء (Logs).
  • دورة حياة iOS: تُستخدم أدوات simctl وdevicectl وxcodebuild لإدارة المحاكيات، وتثبيت وتشغيل التطبيقات، والتقاط الصور، فضلاً عن تشغيل وكيل XCUITest.
  • تفاعل العناصر: يتولى وكلاء Android وiOS الأصليين مهام البحث، الانتظار، النقر، تعبئة البيانات، السحب، التمرير، وأوامر لوحة المفاتيح.
  • Flutter (على Android): عند التعرف على تطبيق Flutter بصيغة APK، يقرأ Astur بنية الواجهة الحية عبر خدمة Dart VM بدلاً من UIAutomator، في حين يظل ADB مسؤولاً عن دورة الحياة وتمرير الإيماءات. لمزيد من التفاصيل، راجع Flutter و React Native.

أدوات إدارة دورة الحياة

تتولى إدارة الأجهزة، والتطبيقات، والتقاط الصور والفيديو، والسجلات بالاعتماد على أدوات مثل ADB و simctl و devicectl و xcodebuild.

وكلاء أصليون مستمرون

يتولون مهام البحث عن العناصر، والتحقق من إمكانية التفاعل، وتنفيذ الإيماءات بشكل مباشر وقريب جداً من واجهة المنصة الأصلية.

هذا الفصل يضمن موثوقية عالية في إدارة دورة الحياة دون إبطاء عمليات التفاعل المعتادة مع العناصر بسبب أوامر الطرفية البطيئة.

أداة Inspector وتوليد الكود

Section titled “أداة Inspector وتوليد الكود”

تعتمد أداة Inspector في Astur على نفس بيئة التشغيل ونموذج المحددات المستخدم في الاختبارات.

الشاشة الحية
+
البنية الدلالية
ترتيب المحددات
كود @astur-mobile/test

لا تخترع الأداة نظام محددات خاصاً بها؛ بل عندما تقترح محدداً أو تسجل نقرة أو تولد كوداً، فإنها تستخدم نفس المعايير الموحدة المستقلة عن المنصة التي تُطبق فعلياً أثناء تشغيل الاختبارات.

القواعد الأساسية للموثوقية

Section titled “القواعد الأساسية للموثوقية”
  • استخدم المحددات الدلالية بدلاً من الاعتماد على الإحداثيات المكانية.
  • اعتمد على قدرات الوكيل الأصلي للبحث المتكرر عن العناصر داخل المنصة.
  • اجعل الصور واللقطات لأغراض التشخيص، وليس للتحكم في مسار الاختبار.
  • حافظ على عمل وكيل منصة واحد لكل عامل (Worker) في Playwright قدر الإمكان.
  • خصص جهازاً فعلياً واحداً لكل عامل؛ فالتوازي الحقيقي لا يتحقق إلا بتعدد الأجهزة.
  • عند الاعتماد على إعدادات جهاز مرنة، دع Astur يختار الجهاز المتاح الأنسب محلياً بدلاً من حشد العمال على الجهاز الأول المتاح.
  • تجنب إعادة تشغيل التطبيق أو إعادة ضبط حالته بين ملفات الاختبار إلا إذا كانت طبيعة العزل تتطلب ذلك.
  • اجعل متطلبات XCTest في iOS واضحة وصريحة وتجنب إخفاءها خلف طبقات WebDriver.

الخطوة الشائعة للتثبيت هي:

Terminal window
npm install -D @astur-mobile/test astur-mobile

توفر حزمة @astur-mobile/test التجهيزات، ومحددات Playwright، والتأكيدات. في حين توفر astur-mobile واجهة سطر الأوامر وأدوات مثل doctor وdevices وinit وtest وcodegen. تُنشر الحزم الداخلية مثل @astur-mobile/core و @astur-mobile/android و @astur-mobile/ios كحزم npm عادية للحفاظ على بنية المشروع المعيارية، دون أن يضطر المستخدمون للتعامل معها بشكل مباشر.