Appium القدرات المطلوبة ل Android منافس
⚡ ملخص ذكي
القدرات المطلوبة هي أزواج المفتاح والقيمة و Appium يرسل العميل عند فتح جلسة، ويخبر الخادم بالمنصة والجهاز وبرنامج التشغيل والتطبيق الذي يجب تشغيل الاختبار الآلي عليه.

ما هي القدرات المطلوبة
تساعدنا "القدرات المطلوبة" على تعديل سلوك الخادم أثناء التشغيل الآلي. Appium هي عبارة عن خريطة تجزئة، أو زوج من المفاتيح والقيم، تُستخدم لإرسال أمر إلى Appium الخادم، حيث يتم تشغيل كل أمر من أوامر العميل في سياق جلسة.
على سبيل المثال، يرسل العميل طلب POST /session يحتوي على كائن JSON إلى Appium الخادم.
لذا، لإرسال طلب أو الحفاظ على جلسة مع الخادم، يتم استخدام مجموعة من أزواج المفاتيح والقيم. وهذا ما يُعرف باسم "القدرات المطلوبة".
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); }
الدور المهم للقدرة المرغوبة
- تساعد خاصية "DesiredCapabilities" المستخدم على التحكم في طلب الجلسة مع الخادم. على سبيل المثال، بالنسبة لجلسة iOS، نضبط الخاصية platformName على iOS، وبالنسبة لـ Android session platformName = Android.
- تُستخدم "DesiredCapabilities" لإعداد مثيل WebDriver، على سبيل المثال Firefoxبرنامج التشغيل، أو برنامج تشغيل Chrome، أو برنامج تشغيل InternetExplorer.
- DesiredCapability مفيد جدًا لـ Selenium الشبكة. على سبيل المثال، تُستخدم لتشغيل حالات اختبار مختلفة على متصفحات وأنظمة تشغيل مختلفة. بناءً على الإمكانية المحددة، يشير مركز الشبكة إلى العقدة المقابلة. تُعرَّف العقد باستخدام دوال خاصية "set".
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- تُعدّ الإمكانية المطلوبة حزمة مُعرّفة في المكتبة. قبل استخدام "DesiredCapabilities"، يجب استيرادها من المكتبة المذكورة أدناه.
Org.openqa.selenium.remote.DesiredCapabilities
Appium يدعم كلا Android ونظام iOS، لذا توجد مجموعة منفصلة من Appium إمكانيات الخادم لكل منصة.
يوضح الجدول أدناه بعض الاستخدامات الشائعة Android القدرات والقيم التي يجب استخدامها.
| القدرات | الوصف | القيم/الاستخدامات |
|---|---|---|
| appPackage | اتصل بالمطلوب Java حزمة في Android التي يرغب المستخدم في تشغيلها |
القيمة = com.example.myapp/ Obj.setCapability("appPackage"، "com.whatsapp"); |
| com.appActivity | نشاط التطبيق الذي يرغب المستخدم في تشغيله من الحزمة. |
القيمة = النشاط الرئيسي، الإعدادات Obj.setCapability("نشاط التطبيق"، "com.whatsapp.Main"); |
| appWaitPackage | الحزمة التي يحتاج التطبيق إلى انتظارها | القيمة=com.example.android.myapp |
| appWaitActivity | اي Android النشاط الذي يحتاج المستخدم إلى انتظاره |
القيمة = SplashActivity القدرات.setCapability("appWaitActivity"، "com.example.game.SplashActivity") |
ملاحظة: راجع Appium توثيق لعرض المزيد Android القدرات.
يوضح الجدول أدناه بعض إمكانيات نظام التشغيل iOS الشائعة الاستخدام والقيم التي يجب استخدامها.
| القدرات | الوصف | القيم |
|---|---|---|
| LaunchTimeout | إجمالي الوقت (بالمللي ثانية) لانتظار الأجهزة. | 2000 |
| أنت فعلت | لتحديد رقم الجهاز الفريد لجهاز مادي متصل | 166aestu4 |
ملاحظة: راجع Appium دليل القدرات للاطلاع على المزيد من إمكانيات نظام iOS.
كيف تغيرت القدرات المطلوبة في Appium 2
الأمثلة المذكورة أعلاه مأخوذة من Appium لا تزال الحقبة الأولى تُظهر شكل مجموعة القدرات، ولكن تم تغيير قاعدتين، وكلاهما سيمنع بدء جلسة حديثة.
أولاً، لا تحدد مواصفات W3C WebDriver سوى مجموعة صغيرة من الإمكانيات القياسية، والتي منها platformName و browserName الأمر مهم هنا. كل قدرة أخرى هي امتداد من البائع ويجب أن تحمل بادئة مساحة اسم تنتهي بنقطتين رأسيتين. Appiumالبادئة 's هي appium:. هكذا deviceName يصبح appium:deviceName و platformVersion يصبح appium:platformVersion. Appium 2 يتطلب أيضًا appium:automationNameلأن برامج التشغيل يتم تثبيتها بشكل منفصل بدلاً من أن تكون مدمجة مع الخادم.
ثانيًا، تكرار البادئة يصبح مملاً، لذا Appium يقبل واحد appium:options القدرة التي تكون قيمتها كائنًا. لا تحتاج القدرات الموجودة داخل هذا الكائن إلى بادئة، وعندما يظهر اسم داخل الكائن وخارجه، فإن القيمة الداخلية هي التي تسود.
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
⚠️ ملاحظة حول الإصدار: على Java جانب، Selenium و4 Appium Java تم إيقاف العميل 8 DesiredCapabilities الفئة الموضحة سابقًا. أدوات البناء الخاصة بسائقي التشغيل الموروثة من BaseOptions استبدله — UiAutomator2Options لـ Android و XCUITestOptions لأجهزة iOS — مع خريطة مطابقة تمامًاping من كل قديم setCapability استدعاء. تم الاحتفاظ بالرمز الأصلي أعلاه هنا كمثال تاريخي.
Extracمعلومات عن باقات وأنشطة التخييم
الحزم عبارة عن ملفات أو فئات مجمعة. وهي توفر بنية منظمة للبرمجة المعيارية. Javaتُخزَّن الحزم المختلفة في ملف JAR واحد، ويمكن للمستخدم استدعاء هذا الملف لتنفيذه بالكامل. ويُتّبع مفهوم مماثل في تطوير تطبيقات الجوال.
في خانة رمز الخصم، أدخل TABBYDAY. Android يتم تثبيت جميع التطبيقات في نظام التشغيل على شكل Java الطرود. لذا، على سبيل المثالtracمعلومات مسار حزمة t، Android يتم استخدام فئة PackageManager.
يقوم باسترداد معلومات الحزمة والنشاط للتطبيقات المثبتة مسبقًا والتطبيقات المثبتة لاحقًا على الجهاز.
يمكنك الحصول على نسخة من فئة PackageManager عن طريق استدعاء الدالة getPackageManager(). تتيح هذه الدالة الوصول إلى الحزم والصلاحيات المتعلقة بالتطبيقات المثبتة ومعالجتها.
فمثلا:
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
كيفية العثور على appPackage و appActivity باستخدام adb
يعمل مسار PackageManager المذكور أعلاه من داخل التطبيق. كمختبر، عادةً ما يكون لديك الإصدار المثبت فقط، لذا فإن المسار الأسرع هو الاستعلام عبر بنك التنمية الآسيوي مقابل جهاز متصل أو محاكي.
افتح التطبيق على الجهاز يدويًا، ثم شغّل أحد الأوامر التالية من سطر الأوامر في مجلد platform-tools. يعرض الأمر النافذة النشطة حاليًا، ويتم تنسيق القيمة على النحو التالي: package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
استخدم النموذج الأول في Windows استخدم موجه الأوامر، ثم استخدم سطر الأوامر الثاني في واجهة يونكس أو جيت باش. اقرأ النتيجة على أنها نصفان: كل ما قبل الشرطة المائلة هو قيمة لـ appPackageوكل ما يلي ذلك يمثل قيمة لـ appActivity.
يجب مراعاة أمرين. أولهما، أن النشاط المُركّز عليه هو ما يظهر على الشاشة في تلك اللحظة، وهو ليس بالضرورة النشاط الذي يبدأ به التطبيق - فإذا فشلت جلسة أثناء تهيئة برنامج التشغيل، فأعد تشغيل التطبيق واقرأ القيمة مرة أخرى. وثانيهما، إذا ظهرت شاشة البداية أولًا، فسيختلف نشاط الدخول عن النشاط الذي تريد التحقق منه لاحقًا، وهذا هو الحال بالفعل. appWaitActivity موجود من أجل.
البديل المرئي هو uiautomatorviewer، والذي يلتقط التسلسل الهرمي الحالي للشاشة ويعرض الحزمة وفئة كل عقدة.
أخطاء شائعة في القدرات المطلوبة وكيفية إصلاحها
معظمهم فشلوا Appium تنتهي الجلسات قبل تنفيذ أي خطوة اختبار، والسبب في أغلب الأحيان يكمن في مجموعة الإمكانيات وليس في الاختبار نفسه. يوضح الجدول أدناه العلاقة بين كل رسالة وحلها المعتاد.
| رسالتك | سبب محتمل | حل |
| إمكانية WebDriver غير صالحة أو غير مدعومة | تم إرسال خاصية غير قياسية بدون بادئة البائع | أضف appium: إليه، أو انقله إلى داخل appium:options |
| يجب أن تتضمن الإمكانيات المطلوبة إما اسمًا للأتمتة أو اسمًا للمنصة | Appium لا يمكن لشخصين اختيار سائق | قم بتعيين platformName و appium:automationName بشكل صريح |
| لا يمكن تشغيل التطبيق. الخطأ الأصلي: النشاط المستخدم لتشغيل التطبيق غير موجود. | لا يتطابق تطبيق النشاط مع ملف البيان | أعد قراءة القيمة باستخدام أمر dumpsys المذكور أعلاه |
| لم تبدأ الجلسة: لم يتم العثور على أي أجهزة | لا يوجد جهاز محاكاة أو جهاز محمول متصل | تأكد من الجهاز باستخدام أداة adb devices قبل التشغيل |
| تعذر إنشاء جلسة جديدة بعد انتهاء المهلة | تؤدي شاشة البداية إلى تأخير عملية الدخول | قم بتعيين appWaitActivity وقم برفع appWaitDuration |
| لا تتم إعادة ضبط حالة التطبيق بين عمليات التشغيل | تم تجاوز سلوك إعادة الضبط الافتراضي | Revعرض خياري appium:noReset و appium:fullReset للتشغيل الذي تريده |
عندما ترفض الجلسة البدء، اقرأ Appium سجل الخادم بدلاً من مكدس العميل tracهـ. يحدد الخادم القدرة التي لم يتمكن من تلبيتها، ويشير هذا السطر إلى الحل.
