شرح Google ARTEMIS لاختبار تطبيقات أندرويد بالذكاء الاصطناعي وأتمتة الهاتف
اختبار تطبيقات Android من أكثر المراحل التي تحتاج إلى وقت أثناء تطوير أي تطبيق، خصوصًا عندما يبدأ المشروع في التوسع ويحتوي على عدد كبير من الشاشات والسيناريوهات والـ Flows التي يجب اختبارها بعد كل تحديث.
في المشاريع التقليدية يمكن كتابة اختبارات آلية باستخدام أدوات مثل UI Automator أو Appium أو Espresso، لكن المشكلة تظهر عندما تكون الواجهة متغيرة باستمرار أو تحتوي على عناصر مخصصة أو شاشات مبنية باستخدام Flutter وJetpack Compose وCanvas.
هنا يظهر مشروع Google ARTEMIS، وهو مشروع مفتوح المصدر يهدف إلى تحويل التعليمات المكتوبة باللغة الطبيعية إلى عمليات آلية على أجهزة Android الحقيقية أو المحاكيات، مع القدرة على تنفيذ الخطوات، وتحليل الشاشة، والتعامل مع عناصر الواجهة، وجمع screenshots وLogcat، وربط الجهاز بمساعدات البرمجة التي تعتمد على الذكاء الاصطناعي.
في هذا المقال سنتعرف على ARTEMIS بالتفصيل، وكيفية تثبيته، وكيفية ربط هاتف Android، وكيفية تنفيذ أول Test باستخدام اللغة الطبيعية، وما الفرق بين Flash وPro، وكيفية استخدامه مع Flutter، وكيفية ربطه مع Codex وClaude Code وCursor وAntigravity وWindsurf من خلال MCP، بالإضافة إلى استخدام Python SDK وبناء سيناريوهات اختبار أكثر تعقيدًا.
ما هو Google ARTEMIS؟
ARTEMIS هو مشروع من Google مخصص لأتمتة أجهزة Android باستخدام تعليمات مكتوبة باللغة الطبيعية، حيث يستطيع النظام فهم المطلوب منه ثم مراقبة الشاشة وتنفيذ الإجراءات المناسبة للوصول إلى النتيجة المطلوبة.
بدلًا من كتابة عشرات الخطوات بشكل صريح، يمكنك إعطاء ARTEMIS مهمة مثل:
افتح تطبيق الإعدادات، انتقل إلى البطارية،
تحقق من ظهور نسبة البطارية، وأخبرني إذا ظهرت أي نافذة خطأ.يقوم ARTEMIS بتحويل هذا الطلب إلى سلسلة من عمليات التفاعل على الجهاز، ثم يعيد نتيجة التنفيذ وسجلًا للعملية.
ما الذي يميز ARTEMIS عن أدوات اختبار Android التقليدية؟
الفكرة الأساسية مختلفة عن اختبارات UI التقليدية التي تعتمد غالبًا على كتابة Selector أو XPath أو معرف عنصر محدد لكل خطوة.
ARTEMIS يعتمد على عدة طبقات لفهم واجهة التطبيق، منها شجرة الواجهة وإمكانيات الوصول وOCR والرؤية البصرية، مع وجود مسارات بديلة لتحديد موقع العناصر عندما تكون الواجهة مخصصة. وتذكر وثائق المشروع أنه يستطيع التعامل مع واجهات Canvas وCompose وFlutter بالإضافة إلى الواجهات التقليدية.
هذا يعني أنه بدل أن تقول للأداة:
اضغط على العنصر الذي يحتوي على ID معينيمكنك إعطاؤها وصفًا أقرب إلى طريقة تفكير المستخدم:
افتح تسجيل الدخول، أدخل البريد التجريبي،
ثم اضغط على تسجيل الدخول وتأكد من الانتقال إلى الصفحة الرئيسية.الكلمة المفتاحية: اختبار تطبيقات أندرويد بالذكاء الاصطناعي
يعتبر ARTEMIS مثالًا واضحًا على مفهوم اختبار تطبيقات أندرويد بالذكاء الاصطناعي، لأن الذكاء الاصطناعي هنا لا يقتصر على كتابة كود الاختبار، بل يدخل في عملية فهم واجهة المستخدم وتحديد الخطوة التالية أثناء التنفيذ.
وهذا يفتح سيناريوهات جديدة مثل اختبار تطبيق كامل من خلال وصف وظيفي، أو استكشاف مشكلة UI، أو تنفيذ Flow طويل لا تريد كتابة كل خطوة فيه يدويًا.
أهم مميزات ARTEMIS
- تنفيذ مهام Android باستخدام تعليمات باللغة الطبيعية.
- تشغيل الاختبارات على جهاز حقيقي أو Android Emulator.
- التعامل مع أكثر من تطبيق في نفس السيناريو.
- فهم عناصر الواجهة باستخدام أكثر من أسلوب للـ Targeting.
- دعم Flutter وJetpack Compose وواجهات Canvas.
- جمع Screenshots أثناء التنفيذ.
- جمع Logcat وتشخيص المشاكل.
- واجهة Web لعرض التنفيذ بشكل مباشر.
- CLI لتشغيل السيناريوهات من Terminal.
- تكامل MCP مع أدوات الذكاء الاصطناعي داخل IDE.
- Python SDK لدمج ARTEMIS في أنظمة الاختبار الخاصة بك.
- وجود وضع Flash سريع ووضع Pro أكثر اعتمادًا على التخطيط والتحقق.
هذه الوظائف هي جزء من التصميم الحالي للمشروع كما هو موضح في المستودع الرسمي ووثائق MCP.
ما الذي تحتاجه قبل تثبيت ARTEMIS؟
المشروع الحالي يعتمد على Python 3.12 أو أحدث. كما يتعامل مع Android من خلال ADB ويحتاج إلى جهاز حقيقي مع USB Debugging مفعّل أو Emulator متصل بالجهاز الذي تشغل عليه ARTEMIS.
كما يعتمد المشروع على مجموعة أدوات إضافية مثل ADB وscrcpy وFFmpeg وuv، ويحتوي سكربت التشغيل الرسمي على منطق لتثبيت أو إعداد الأدوات المطلوبة بشكل تلقائي في بيئات التشغيل المدعومة.
تثبيت Google ARTEMIS
ابدأ باستنساخ المستودع:
git clone https://github.com/google/artemis.git
cd artemisعلى macOS وLinux استخدم سكربت التشغيل:
./start.shوعلى Windows PowerShell:
.\start.batبحسب README الرسمي، يعمل سكربت التشغيل على تجهيز الاعتمادات وتشغيل واجهة ARTEMIS، كما يفتح واجهة Web محليًا عند تشغيلها في بيئة رسومية.
إعداد البيئة يدويًا
إذا كنت تفضل التحكم في خطوات الإعداد بنفسك، يوفر المشروع أوامر Make جاهزة:
make install
make build-ui
make setupكما تتوفر أوامر منفصلة لتثبيت أدوات النظام:
make install-deps وتوضح Makefile الرسمية أن make install يقوم بتثبيت اعتمادات Python عبر uv، بينما make install-deps مخصص لتثبيت أدوات مثل ADB وFFmpeg وscrcpy وuv.
إنشاء ملف .env
بعد تشغيل المشروع ستحتاج إلى إعداد مفاتيح مزود الذكاء الاصطناعي الذي سيستخدمه ARTEMIS.
يوفر المشروع ملفًا باسم:
.env.exampleويمكن نسخه:
cp .env.example .envثم إضافة بيانات الاعتماد المناسبة.
من المزودين الموجودين في القالب الحالي:
GEMINI_API_KEY=
GOOGLE_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
OPEN_ROUTER_API_KEY=
XAI_API_KEY=كما توجد إعدادات منفصلة اختيارية للـ OCR وإعدادات ADB والجهاز وملف التنفيذ الافتراضي.
إعداد ADB مع ARTEMIS
ARTEMIS يعتمد على ADB للتواصل مع جهاز Android.
الإعدادات الافتراضية الموجودة في القالب:
ADB_HOST=127.0.0.1
ADB_PORT=5037ويمكن تحديد جهاز معين باستخدام:
ADB_DEVICE_SERIAL=أما إذا كان لديك Emulator واحد أو جهاز واحد متصل فقط، فعادةً لا تحتاج إلى تحديد Serial يدويًا.
التأكد من اتصال الهاتف
بعد تفعيل USB Debugging يمكنك التأكد من اتصال الهاتف باستخدام:
adb devicesويجب أن يظهر الجهاز في القائمة.
بعد ذلك يمكنك تشغيل:
uv run artemis doctor الأمر doctor مخصص لفحص حالة البيئة والأدوات والجهاز والتكوين، وتوصيات المشروع تشير إلى استخدامه عند مواجهة مشاكل في تشغيل ARTEMIS أو MCP.
أول اختبار باستخدام ARTEMIS
بعد اكتمال الإعداد يمكنك تنفيذ مهمة مباشرة من Terminal:
uv run artemis run \
"Open Settings, find Battery and tell me current level" \
--profile flash الفكرة هنا أن النص بين علامتي الاقتباس يمثل المهمة التي تريد من ARTEMIS تنفيذها، بينما --profile flash يحدد نمط التنفيذ السريع.
اختبار تسجيل الدخول في تطبيق Android
لنفترض أن لديك تطبيقًا يحتوي على شاشة تسجيل دخول.
يمكن كتابة سيناريو مثل:
افتح التطبيق.
انتظر ظهور شاشة تسجيل الدخول.
أدخل البريد test@example.com.
أدخل كلمة المرور Test123456.
اضغط على تسجيل الدخول.
تأكد من ظهور الصفحة الرئيسية.
تحقق من عدم ظهور أي نافذة خطأ.ميزة هذا الأسلوب أن السيناريو مكتوب كلغة بشرية بدل ربط الاختبار بمجموعة ثابتة من Selectors.
اختبار تطبيق Flutter باستخدام ARTEMIS
إذا كنت مطور Flutter، فهذه النقطة مهمة بشكل خاص.
وثائق ARTEMIS تذكر أن نظام تحديد العناصر يستطيع التعامل مع واجهات Flutter، بالإضافة إلى Compose وCanvas.
بالتالي يمكنك استخدام ARTEMIS لاختبار سيناريوهات داخل تطبيق Flutter مثل:
- تسجيل الدخول.
- التسجيل وإنشاء حساب.
- البحث عن منتج.
- إضافة منتج إلى السلة.
- إتمام الدفع.
- فتح صفحة الطلب.
- التعامل مع Dialogs وBottom Sheets.
- التحقق من انتقالات Navigation.
مثال عملي لتطبيق Flutter
لنفترض أن التطبيق يحتوي على السيناريو التالي:
افتح تطبيق المتجر.
ابحث عن "iPhone 16".
افتح أول منتج.
أضفه إلى السلة.
افتح السلة.
تأكد من ظهور المنتج بالسعر الصحيح.يمكن إرسال هذه المهمة إلى ARTEMIS دون كتابة كل خطوة كاختبار UI يدوي.
اختبار أكثر من تطبيق
ARTEMIS مصمم للتعامل مع Workflows تتجاوز تطبيقًا واحدًا.
ويذكر المشروع مثالًا مباشرًا يبدأ من Google Maps ثم ينتقل إلى YouTube لتشغيل محتوى معين. هذه الإمكانية مفيدة عند اختبار السيناريوهات التي تتفاعل مع تطبيقك وتطبيقات النظام أو التطبيقات الخارجية.
على سبيل المثال:
افتح تطبيق المتجر.
أضف المنتج إلى السلة.
ابدأ الدفع.
افتح تطبيق الرسائل.
تحقق من وصول رسالة التأكيد.واجهة ARTEMIS Web UI
يوفر المشروع واجهة Web يمكن استخدامها لمراقبة تنفيذ الاختبارات بصريًا بدل الاعتماد على Terminal فقط.
يمكن تشغيلها من خلال:
uv run artemis ui --openوتعرض الواجهة إمكانات مثل بث شاشة الجهاز، إرسال المهام باللغة الطبيعية، مشاهدة مسار التنفيذ، واستعراض نتائج المهام وإعادة تشغيلها.
إدارة خدمة ARTEMIS
إذا كنت تستخدم واجهة Web لفترة طويلة، يمكن إدارة الخدمة من خلال:
uv run artemis restart
uv run artemis stop
uv run artemis status
كما توفر Makefile المقابلة أوامر:
make restart
make stop
make statusوهذه الأوامر مذكورة ضمن واجهة التشغيل الرسمية للمشروع.
ما الفرق بين Flash وPro في ARTEMIS؟
يحتوي ARTEMIS على نمطين رئيسيين للتنفيذ: Flash وPro.
Flash
تم تصميم Flash للتنفيذ التفاعلي السريع، وتذكر وثائق المشروع أنه عادةً يعمل بحوالي 3 إلى 5 ثوانٍ لكل خطوة بحسب المهمة والبيئة.
الفكرة الأساسية هي:
Observe
↓
Think
↓
Act
↓
Observe againوهو مناسب للسيناريوهات الروتينية والحتمية نسبيًا.
مثال:
uv run artemis run \
"Open the app and verify that the login button is visible" \
--profile flashPro
أما Pro فهو مصمم للسيناريوهات التي تحتاج إلى تخطيط وتحقيق وتحقق من النتائج، ويعتمد على Workflow متعدد الوكلاء يحتوي على Planner وOperator وChecker.
ويمكنه التعامل مع السيناريوهات طويلة المدى، بما فيها المهام التي تتجاوز 100 خطوة وفق توثيق المشروع.
مثال:
uv run artemis run \
"Complete the entire checkout flow, verify the order confirmation, and report any unexpected dialogs" \
--profile proالتحقق من النتائج في Pro
يحتوي Pro على مستويات للتحقق من النتيجة النهائية ونقاط التحقق أثناء التنفيذ.
من الخيارات الحالية:
off
final
checkpoints
strictويمكن استخدام الخيار:
--verification-level checkpoints عندما تريد أن يتضمن السيناريو عمليات تحقق عند نقاط محددة أثناء التنفيذ. بينما final هو الإعداد الافتراضي المذكور في المشروع.
كيف يفهم ARTEMIS عناصر واجهة التطبيق؟
من أهم نقاط القوة في المشروع أنه لا يعتمد على طريقة واحدة لتحديد العناصر.
يستخدم مجموعة من المصادر مثل:
- Accessibility hierarchy.
- UIAutomator2.
- OCR.
- المعالجة البصرية.
- الإحداثيات عند الحاجة.
كما يوفر Accessibility Helper خاصًا به لتحليل بنية الشاشة، مع وجود UIAutomator2 كمسار بديل.
ARTEMIS Accessibility Helper
عند تشغيل أول مهمة يمكن لـ ARTEMIS تثبيت Accessibility Helper صغير على الجهاز.
ويظهر هذا المكوّن كخدمة وصول Accessibility Service ويظهر أيضًا إشعارًا باسم ARTEMIS test helper.
وفق توثيق المشروع، يعمل هذا المساعد على الجهاز نفسه ولا يرسل البيانات إلى جهة أخرى، ويمكنك تثبيته يدويًا أو حذفه لاحقًا.
لتثبيته مسبقًا:
uv run artemis helper installولعرض حالته:
uv run artemis helper statusولإزالته:
uv run artemis helper uninstallكما يوجد أمر تشخيص شامل:
uv run artemis doctorوهذا مفيد خصوصًا عندما يكون لديك هاتف مخصص للاختبار وتريد تجهيز كل شيء قبل بدء جلسة طويلة.
استخدام UIAutomator2 بدل Accessibility Helper
يمكن تغيير Backend المستخدم في اكتشاف عناصر الواجهة من خلال:
ARTEMIS_HIERARCHY_BACKEND=uiautomatorبينما الوضع الافتراضي:
ARTEMIS_HIERARCHY_BACKEND=autoويعني ذلك استخدام Helper مع وجود UIAutomator2 كـ fallback وفق إعداد المشروع الحالي.
منع التثبيت التلقائي للـ Helper
إذا كنت تستخدم هاتفًا شخصيًا أو جهازًا مشتركًا ولا تريد من المهام تثبيت أو تحديث Accessibility Helper تلقائيًا، يمكنك تعطيل ذلك:
ARTEMIS_HELPER_AUTO_INSTALL=falseوبعدها تستطيع تثبيت الـ Helper يدويًا عند الحاجة:
uv run artemis helper installهذه الإعدادات موضحة في القالب الرسمي للبيئة.
إبقاء شاشة الهاتف قيد التشغيل
أثناء الاختبارات الطويلة قد تحتاج إلى منع الشاشة من الدخول في وضع السكون.
يوفر ARTEMIS إعدادًا لذلك:
ARTEMIS_KEEP_DEVICE_AWAKE=true والقيمة الافتراضية في قالب البيئة هي true. ويمكن تعطيلها إذا كان الجهاز شخصيًا ولا تريد منع الشاشة من الإغلاق.
استخدام ARTEMIS مع Codex وClaude Code وCursor وWindsurf
من أكبر نقاط القوة في المشروع وجود تكامل أصلي مع MCP، وهو ما يسمح لمساعدات البرمجة داخل IDE بالتواصل مع ARTEMIS والتحكم في هاتف Android.
يمكن تثبيت إعدادات MCP لجميع الأدوات المدعومة من خلال:
uv run artemis mcp --install allأو لأداة معينة:
uv run artemis mcp --install codexكما يمكن إنشاء إعدادات يدوية:
uv run artemis mcp --generate-config codexالمشروع يوضح دعم Antigravity وCursor وClaude Code/Desktop وWindsurf وVS Code وCline/Roo وOpenClaw، بالإضافة إلى Codex.
مثال على استخدام ARTEMIS مع Codex
بعد إعداد MCP يمكن إرسال طلب من داخل IDE مثل:
Build the latest changes into an APK,
install it on the connected Android device,
open the login screen with a test account,
verify that no unexpected popup appears,
and return screenshots of the final page.هذا السيناريو موضح بشكل مباشر في README الرسمي للمشروع كأحد أمثلة استخدام MCP.
إعداد MCP يدويًا مع Codex
إذا كنت تريد إضافة الإعدادات يدويًا، يوفر المشروع صيغة مثل:
[mcp_servers.artemis]
command = "/path/to/artemis/.venv/bin/python"
args = ["-m", "mcp_server"]
cwd = "/path/to/artemis"
[mcp_servers.artemis.env]
PYTHONUNBUFFERED = "1"ويجب استبدال المسار بالمسار الحقيقي لمشروع ARTEMIS لديك.
التكامل مع Python SDK
إذا كنت لا تريد تشغيل ARTEMIS فقط من CLI، فيمكن استخدام Python SDK داخل مشروعك أو نظام الاختبار الخاص بك.
يتم تثبيته من المستودع:
uv add "artemis-client @ git+https://github.com/google/artemis.git#subdirectory=packages/artemis-client"ثم:
import asyncio
from artemis_client import ArtemisClient
async def main():
client = ArtemisClient(
"http://artemis-host:8000",
device_serial="emulator-5554",
default_profile="flash",
)
result = await client.run(
"Open System Settings, go to Battery, "
"verify battery percentage is displayed, "
"and check for any crash dialogs.",
)
assert result.succeeded, (
result.error or result.status
)
print(
f"Device: {result.device_serial}"
)
print(
f"Trace ID: {result.trace_id}"
)
if __name__ == "__main__":
asyncio.run(main())هذا النمط يسمح بدمج ARTEMIS مع اختبارات Python أو pytest أو أدوات CI/CD مخصصة، مع إرجاع نتيجة منظمة يمكن استخدامها في Assertions داخل نظامك.
دمج ARTEMIS مع pytest
يمكنك الاستفادة من Python SDK لبناء Test ينجح أو يفشل حسب نتيجة المهمة.
import pytest
from artemis_client import ArtemisClient
@pytest.mark.asyncio
async def test_login_flow():
client = ArtemisClient(
"http://artemis-host:8000",
device_serial="emulator-5554",
default_profile="pro",
)
result = await client.run(
"""
Open the application.
Enter the test account credentials.
Tap Login.
Verify that the Home screen is displayed.
Check that no crash dialog is visible.
"""
)
assert result.succeeded, (
result.error or result.status
)بهذه الطريقة يصبح ARTEMIS جزءًا من نظام اختبار أكبر بدل الاعتماد فقط على التشغيل اليدوي من Terminal.
اختبار تطبيق Flutter من خلال AI IDE
يمكن استغلال التكامل بين Flutter وARTEMIS وMCP لبناء Workflow شبه متكامل:
تعديل Flutter Code
↓
Build APK
↓
Install APK
↓
ARTEMIS
↓
اختبار واجهة التطبيق
↓
Screenshots + Logs
↓
تحليل النتيجة
ويمكن أن تصبح العملية مفيدة جدًا أثناء تطوير تطبيقات POS أو E-Commerce أو تطبيقات الخدمات التي تحتوي على Flows طويلة.
مثال على اختبار تطبيق POS باستخدام ARTEMIS
يمكن كتابة سيناريو مثل:
Open the POS application.
Sign in using the test account.
Open the products screen.
Search for "Coffee".
Add the first product to the cart.
Open the cart.
Verify the quantity is 1.
Proceed to checkout.
Verify the total is visible.
Do not complete the payment.
Return a screenshot of the checkout screen.
بدل إنشاء عشرات اختبارات UI اليدوية، يمكن إرسال السيناريو كمهمة واحدة إلى ARTEMIS.
اختبار التطبيق بعد كل Build
من السيناريوهات المناسبة جدًا هو تشغيل ARTEMIS بعد كل Build ناجح.
مثلًا:
Build the latest APK.
Install it on the test device.
Open the application.
Verify that the login screen is displayed.
Test the login flow.
Verify the Home screen.
Take screenshots of the final state.
Report any unexpected dialogs.
ويمكن ربط هذا النوع من السيناريوهات مع CI/CD بحسب البيئة التي تستخدمها.
هل ARTEMIS بديل كامل لاختبارات Unit وWidget Tests؟
لا.
ARTEMIS يستهدف مستوى مختلفًا من الاختبار، وهو تنفيذ سيناريوهات كاملة على جهاز Android والتعامل مع الواجهة كما يفعل المستخدم.
يمكن أن يكون لديك في مشروع Flutter:
- Unit Tests لمنطق التطبيق.
- Widget Tests للمكونات.
- Integration Tests لسلوك التطبيق.
- ARTEMIS لاختبار السيناريوهات التفاعلية على جهاز حقيقي أو Emulator.
وبالتالي لا ينبغي النظر إلى ARTEMIS باعتباره بديلًا عن كل طبقات الاختبار، وإنما كطبقة إضافية للأتمتة والاستكشاف والاختبار المبني على اللغة الطبيعية.
تشخيص الأخطاء والحصول على Logcat
من المميزات المهمة في النظام قدرته على العمل مع معلومات التشخيص، بما فيها Logcat وScreenshots أثناء المهمة.
وهذا يجعل السيناريو أقرب إلى:
Run test
↓
Observe UI
↓
Detect failure
↓
Capture screenshot
↓
Inspect logs
↓
Generate result وتوفر وثائق المشروع أيضًا عمليات تشخيص داخل تكامل MCP، وتوصي باستخدام أداة mobile_diagnose عندما يحدث فشل أو لا يتم العثور على الجهاز.
تشغيل ARTEMIS في بيئة Remote
يمكن تشغيل ARTEMIS على جهاز Remote أو Cloud Host مع تمرير منفذ واجهة Web عبر SSH.
يوضح سكربت التشغيل الرسمي أنه عند اكتشاف جلسة Remote يمكن الوصول إلى الواجهة من خلال SSH Tunnel مثل:
ssh -L 8000:localhost:8000 user@hostوهذا يسمح باستخدام جهاز الاختبار الموجود في بيئة أخرى مع فتح واجهة ARTEMIS محليًا على جهاز المطور.
الخصوصية وبيانات الجهاز
لأن ARTEMIS يعمل مع شاشة هاتف حقيقي ويستخدم نماذج ذكاء اصطناعي، فمن المهم فهم البيانات التي يتم التعامل معها قبل استخدامه على جهاز شخصي أو بيانات إنتاجية.
المشروع يذكر أن Accessibility Helper نفسه يعمل على الجهاز ولا يرسل البيانات إلى جهة أخرى، لكن ARTEMIS يعتمد أيضًا على مزودي LLM الذين تقوم أنت بإعدادهم من خلال مفاتيح API، وبالتالي يجب تقييم سياسة المزود الذي اخترته وطبيعة البيانات التي قد تدخل في عملية التحليل.
لهذا السبب من الأفضل استخدام حسابات اختبار وبيانات غير حساسة عند بناء سيناريوهات الأتمتة.
الأنظمة المدعومة حاليًا
الهدف الحالي للمشروع هو أتمتة Android، ويحتاج إلى جهاز Android حقيقي أو Emulator.
أما دعم iOS فما زال مذكورًا ضمن خارطة الطريق، وليس ضمن المنصة الأساسية الحالية للمشروع.
هل ARTEMIS مناسب لمشاريع Flutter؟
نعم، خصوصًا عندما يكون هدفك اختبار التطبيق من منظور المستخدم وليس فقط اختبار دوال أو Widgets منفصلة.
وهذا مفيد في تطبيقات مثل:
- Flutter POS.
- تطبيقات E-Commerce.
- تطبيقات المطاعم.
- تطبيقات الحجز.
- تطبيقات الخدمات.
- تطبيقات تسجيل الدخول والتوثيق.
- التطبيقات التي تحتوي على Flows متعددة الشاشات.
ARTEMIS وFlutter Navigation
لن تحتاج إلى معرفة طريقة الـ Navigation داخل Flutter حتى تعطي ARTEMIS مهمة تفاعلية.
بدلًا من كتابة:
Navigator.push(...)يمكن أن يكون سيناريو الاختبار:
Open the orders screen,
open the first order,
tap View Details,
and verify the order number is visible.وهو ما يجعل الاختبار مرتبطًا بالسلوك الظاهر للمستخدم أكثر من ارتباطه ببنية الكود الداخلية.
تشغيل ARTEMIS من مشروع Flutter
إذا كان مشروع Flutter لديك موجودًا في:
/Projects/my_flutter_appيمكن أن يكون لديك Terminal آخر خاص بـ ARTEMIS:
cd /Projects/artemis
uv run artemis run \
"Open the installed Flutter app, login with the test account, and verify that the dashboard loads" \
--profile proبهذه الطريقة يبقى مشروع Flutter منفصلًا عن مشروع ARTEMIS، بينما يتواصل الأخير مع الجهاز عبر ADB.
نتائج AndroidWorld
يذكر المشروع أن ARTEMIS حقق معدل إكمال يتجاوز 99% على AndroidWorld، وهو Benchmark يتضمن أكثر من 100 مهمة متعددة الخطوات عبر أكثر من 20 تطبيقًا.
هذه النتيجة هي رقم يورده المشروع نفسه ضمن README، ولذلك ينبغي التعامل معه باعتباره نتيجة المعيار المنشورة من فريق المشروع وليس ضمانًا بأن كل تطبيق حقيقي سيحقق النتيجة نفسها.
تركيب المشروع الداخلي
المستودع لا يحتوي فقط على برنامج CLI صغير، وإنما يتضمن عدة أجزاء، منها:
artemisلطبقة الأتمتة الأساسية.mcp_serverلخادم MCP.packages/artemis-clientلواجهة Python SDK.appsللواجهات والخدمات.testsلاختبارات المشروع.configللإعدادات.
كما أن المشروع يستخدم Python وLangGraph وMCP وعددًا من مكتبات LLM والأتمتة ومعالجة الصور والفيديو. ويمكن مراجعة هذه الاعتمادات داخل pyproject.toml الرسمي.
ترخيص Google ARTEMIS
المشروع منشور بترخيص Apache License 2.0 بحسب المستودع الرسمي، كما يذكر README أن المشروع يتضمن مصدرًا تم تطويره بواسطة Minitap, Inc.
الخلاصة
يقدم Google ARTEMIS اتجاهًا مختلفًا لأتمتة اختبار تطبيقات Android من خلال تحويل التعليمات المكتوبة باللغة الطبيعية إلى عمليات تفاعلية على جهاز حقيقي أو Emulator.
بدل كتابة كل خطوة وكل Selector يدويًا، يمكن وصف السيناريو المطلوب بطريقة قريبة من طريقة المستخدم، ثم يقوم النظام بفهم الشاشة وتنفيذ الإجراءات ومراقبة النتيجة. كما يمكنه التعامل مع Flutter وCompose وCanvas من خلال مزيج من Accessibility وOCR والتحليل البصري.
وتزداد أهمية المشروع عند ربطه بأدوات AI عبر MCP، حيث يمكن لمساعد برمجي مثل Codex أو Claude Code أو Cursor أن يبني التطبيق ويثبته على الجهاز ثم يطلب من ARTEMIS تنفيذ الاختبار والتحقق من النتيجة وإرجاع screenshots وبيانات التشخيص.
وبالنسبة لمطوري Flutter، يمكن أن يكون ARTEMIS مفيدًا كطبقة إضافية ضمن استراتيجية اختبار تطبيقات أندرويد بالذكاء الاصطناعي، خصوصًا في السيناريوهات الطويلة واختبارات End-to-End والاستكشاف التلقائي ومراجعة تجربة المستخدم بعد كل إصدار.
المهم أن تتعامل معه كجزء من منظومة الاختبار وليس كبديل عن Unit Tests وWidget Tests وبقية الاختبارات التي تغطي منطق التطبيق وبنيته الداخلية.
مشروع Google ARTEMIS على GitHub
التوثيق الرسمي لـ ARTEMIS
توثيق ARTEMIS MCP
المزيد من مقالات Flutter وAndroid على Geecoders
الكود والأوامر كاملة
# Clone the repository
git clone https://github.com/google/artemis.git
cd artemis
# macOS / Linux
./start.sh
# Windows PowerShell
.\start.batإعداد البيئة
# Create local environment file
cp .env.example .env
# Install project dependencies
uv sync
# Or use the project setup
make setup
# Install system dependencies
make install-depsملف .env
GEMINI_API_KEY=
GOOGLE_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
OPEN_ROUTER_API_KEY=
XAI_API_KEY=
OCR_API_KEY=
ADB_HOST=127.0.0.1
ADB_PORT=5037
# Optional device serial
# ADB_DEVICE_SERIAL=
ARTEMIS_KEEP_DEVICE_AWAKE=true
# auto | helper | uiautomator
ARTEMIS_HIERARCHY_BACKEND=auto
ARTEMIS_HELPER_AUTO_INSTALL=true
# flash | pro
ARTEMIS_DEFAULT_PROFILE=flashفحص الجهاز والبيئة
adb devices
uv run artemis doctorتشغيل أول Test
uv run artemis run \
"Open Settings, find Battery and tell me current level" \
--profile flashاستخدام Pro
uv run artemis run \
"Complete the login flow, verify the dashboard, and report any unexpected dialogs" \
--profile proمستويات التحقق
uv run artemis run \
"Open the application and verify the checkout flow" \
--profile pro \
--verification-level checkpointsتشغيل Web UI
uv run artemis ui --openإدارة Web UI
uv run artemis restart
uv run artemis stop
uv run artemis statusAccessibility Helper
uv run artemis helper install
uv run artemis helper status
uv run artemis helper uninstallMCP
# Install MCP for all supported IDEs
uv run artemis mcp --install all
# Install for a specific client
uv run artemis mcp --install codex
# Generate manual configuration
uv run artemis mcp --generate-config codexPython SDK
uv add "artemis-client @ git+https://github.com/google/artemis.git#subdirectory=packages/artemis-client"import asyncio
from artemis_client import ArtemisClient
async def main():
client = ArtemisClient(
"http://artemis-host:8000",
device_serial="emulator-5554",
default_profile="flash",
)
result = await client.run(
"""
Open the application.
Login with the test account.
Open the dashboard.
Verify that the dashboard is displayed.
Check for crash dialogs.
"""
)
if not result.succeeded:
raise RuntimeError(
result.error or result.status
)
print(
f"Device: {result.device_serial}"
)
print(
f"Trace ID: {result.trace_id}"
)
if __name__ == "__main__":
asyncio.run(main())مثال لاختبار Flutter
Build the latest Flutter APK.
Install it on the connected Android device.
Open the app.
Login using the test account.
Open the products screen.
Search for "Coffee".
Add the first product to the cart.
Open the cart.
Verify the quantity is 1.
Open checkout.
Verify the final total is displayed.
Take a screenshot of the checkout screen.
Report any unexpected dialogs or errors.مثال لاستخدام ARTEMIS مع pytest
import pytest
from artemis_client import ArtemisClient
@pytest.mark.asyncio
async def test_flutter_checkout_flow():
client = ArtemisClient(
"http://artemis-host:8000",
device_serial="emulator-5554",
default_profile="pro",
)
result = await client.run(
"""
Open the Flutter application.
Login with the test account.
Search for "Coffee".
Add the first result to the cart.
Open the cart.
Verify quantity is 1.
Open checkout.
Verify that the total amount is visible.
"""
)
assert result.succeeded, (
result.error or result.status
)إعداد MCP يدويًا مع Codex
[mcp_servers.artemis]
command = "/path/to/artemis/.venv/bin/python"
args = ["-m", "mcp_server"]
cwd = "/path/to/artemis"
[mcp_servers.artemis.env]
PYTHONUNBUFFERED = "1"مزيد من المقالات : شرح SourceTree للمبتدئين | ربط مشروعك مع GitHub ورفع الكود خطوة بخطوة






