Appium القدرات المطلوبة ل Android منافس

⚡ ملخص ذكي

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

  • 🔴 جلسة كونtract: تنتقل الإمكانيات في نص JSON الخاص بطلب الجلسة الجديدة ولا يمكن تغييرها بعد ذلك.
  • ☑️ Android الضروريات: يُحدد كل من appPackage و appActivity اسم التطبيق والشاشة Appium يجب أن تبدأ.
  • ✅ خيارات الانتظار: تغطي appWaitPackage و appWaitActivity شاشات البداية التي تظهر قبل نقطة الدخول الفعلية.
  • 🧪 Appium بادئة 2: كل إمكانية غير قياسية تحتاج الآن إلى البادئة appium: vendor، وإلا سيرفضها الخادم.
  • 🛠️ بلمسة عصرية Java زبون: تم استبدال DesiredCapabilities بـ UiAutomator2Options و XCUITestOptions ضمن Selenium 4.
  • 📊 إيجاد القيم: يكشف استعلام adb dumpsys أو فئة PackageManager عن أسماء الحزم والأنشطة.

Appium أزواج القيم الرئيسية للقدرات المطلوبة لـ Android جلسة المحاكاة

ما هي القدرات المطلوبة

تساعدنا "القدرات المطلوبة" على تعديل سلوك الخادم أثناء التشغيل الآلي. 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هـ. يحدد الخادم القدرة التي لم يتمكن من تلبيتها، ويشير هذا السطر إلى الحل.

الأسئلة الشائعة

لا، اسم المنصة واسم المتصفح هما من إمكانيات W3C القياسية ولا يبدآن ببادئة. كل شيء آخر Appium تُعتبر القدرة، بما في ذلك اسم الجهاز وإصدار النظام الأساسي، امتدادًا خاصًا بالبائع وتحتاج إلى البادئة appium:.

تقترح أدوات التعلم الآلي في بيئات الحوسبة السحابية للأجهزة مجموعة من الإمكانيات من الجهاز المُنشأ والجهاز المستهدف، وتُشير إلى القيم التي فشلت في جلسات مماثلة. تعامل مع المخرجات كمسودة، وتأكد من كل اسم بالرجوع إلى وثائق برنامج التشغيل.

يُكمل مساعد الطيار وحدات القدرات المشتركة، لكنه تدرب على الكثير من Appium يُستخدم رمز واحد، وغالبًا ما يُحذف البادئة أو يُقترح استخدام فئة DesiredCapabilities المهملة. تحقق من كل اقتراح وفقًا للدليل الحالي.

يُطلق اسم appPackage على الحزمة Appium يقوم التطبيق بتشغيل الحزمة. appWaitPackage يحدد اسم الحزمة Appium ينتظر حتى يظهر قبل إعادة التحكم، وهو أمر مهم عندما يقوم مشغل أو شاشة بدء التشغيل بتحميل حزمة مختلفة أولاً.

تم ضبط platformName على iOS و appium:automationName على XCUITest. يحتاج برنامج تشغيل XCUITest أيضًا إلى واحد على الأقل من appium:app أو appium:bundleId أو browserName، وإلا فسيتم فتح جلسة على الشاشة الرئيسية.

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

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

لا. تُعدّ الإمكانيات معايير لبدء الجلسة، وتُثبّت بمجرد إنشائها. عندما يسمح برنامج التشغيل بتغيير سلوك ما أثناء الجلسة، فإنه يُتيح إعدادًا عبر واجهة برمجة تطبيقات الإعدادات (Settings API).

تلخيص هذه التدوينة بـ: