Poco - أتمتة واجهة المستخدم المستندة إلى Python للألعاب المحمولة كجزء من AirTest IDE

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


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


Poco هو إطار واجهة مستخدم لأتمتة الألعاب يستخدم Python كجزء من AirTest IDE مع القدرة على الجمع بين الوظيفة مع إطار التعرف على الصور (AirTest). تجدر الإشارة إلى أن AirTest IDE لديه دعم للغات أخرى (JS ، Lua ، C # ، Java) ، ولكن توجد أمثلة أخرى في Python ، هذه اللغة هي اللغة الرئيسية.


العناصر الرئيسية للتفاعل هي كما يلي:


صورة


من المعلوم أنه سيتم استخدام Poco في الأماكن التي لا تتعامل فيها AirTest ، ولكن ، كما يلاحظ المطورون أنفسهم ، يمكنك كتابة جميع الاختبارات باستخدام Poco فقط وستكون سرعة تشغيلها أعلى بكثير ، ولكن بعد ذلك تحتاج إلى معرفة Python على المستوى الأساسي على الأقل.


التعارف والاتصال من Poco-SDK لعبتك


لبدء استخدام Poco ، يلزمك التعرف على دليل تكامل poco-sdk وتثبيت برنامج التشغيل الذي تحتاجه من الصفحة المقابلة . محركات اللعبة التالية مدعومة حاليًا: Unity3D ، تطبيقات Android الأصلية ، تطبيقات OSX ، تطبيقات Windows ، cocs2dx-lua ، cocs2dx-js ، Egret ، NetEase Internal Engines . يوفر المطورون أيضًا الفرصة لإنشاء برنامج التشغيل الخاص بهم وتقديم الوثائق التي تصف هذه الميزة - دليل التنفيذ . تم ذكر Unreal Engine في الوثائق الرسمية ، لكن معظمها يسير جنبًا إلى جنب مع عبارة "يطرح قريبًا ..." ، لذلك لا يمكنك أن تقول على وجه اليقين متى سيظهر دعمها.
بعد التعرف على المعلومات العامة والخطوات الإضافية ، تحتاج إلى تنزيل برنامج التشغيل الذي تحتاجه ، بعد تفريغه في مجلد المشروع وتوصيل البرنامج النصي Poco Manager. على سبيل المثال ، بالنسبة للوحدة ، يُقترح إضافة Poco Manager كبرنامج نصي إلى أحد الكائنات الرئيسية للمشهد الرئيسي ، ولا سيما الكاميرا الرئيسية. بعد ذلك ، تحتاج إلى ترجمة اللعبة وتشغيلها على جهاز يدعمه AirTest IDE ونظام التشغيل.


توصيل اللعبة بـ AirTest IDE واختباراتك الأولى


من أجل بساطة ووضوح التوضيحات الإضافية ، سأستخدم المثال مع اللعبة التجريبية الرسمية المكتوبة في Unity ، والتي يوفرها مطورو AirTest IDE. هناك خياران: لنظام التشغيل Windows و Android ، لكنني سأركز على إصدار نظام التشغيل Windows. بالمناسبة ، من الأفضل استخدام Windows 7 ، لأن في نظام التشغيل Windows 10 ، اكتشفت سلوكًا نصيًا غريبًا ، ولا سيما الموقع غير الصحيح للعناصر على الشاشة عند استخدام بعض الأوامر. لم يعمل الرمز نفسه بشكل صحيح على Windows 10 و بشكل صحيح في 7. سننتظر حتى يتم إصلاح هذا الإشراف المزعج في التحديثات المستقبلية.


صورة


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


بعد توصيل اللعبة ، ستحتاج إلى إخبار AirTest IDE أنك ستستخدم Poco للعمل مع محرك ألعاب معين. للقيام بذلك ، استخدم نافذة Poco Assistant في الركن الأيسر السفلي من الشاشة (إذا لم تكن موجودة ، فاستخدم Windows -> Default Layout لاستعادة جميع اللوحات افتراضيًا) وحدد محرك اللعبة الذي تحتاجه من القائمة المنسدلة ، على سبيل المثال Unity. حسنًا ، اللمسة الأخيرة هي الموافقة على إضافة جميع الشفرات اللازمة إلى Script Editor بالنقر فوق الزر "نعم" في الشريط الأصفر الذي يظهر. إذا نجحت جميع الخطوات السابقة ، فستظهر شجرة هرمية لعناصر واجهة المستخدم في الشاشة الحالية لتطبيقك في نافذة مساعد Poco. يُسمى هذا الجزء من Poco Assistant عارض التسلسل الهرمي (UI Unspector) ويعرض قائمة فقط بالعناصر الموجودة حاليًا على الشاشة. يتم تحديث هذه القائمة تلقائيًا في حالة وجود أي تغييرات على الشاشة ، على سبيل المثال ، ظهور عناصر جديدة بعد أحداث معينة (الأحداث).


مثال على الخطوات المذكورة أعلاه تحت المفسد.


مثال على توصيل لعبة في AirTest IDE

صورة


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


مثال لقائمة مملوءة بالعناصر في Poco Assistant

صورة


على سبيل المثال ، إذا كنت بحاجة إلى النقر فوق زر تم تعيينه كـ "btn_start" في التسلسل الهرمي ، فبالنسبة للنقرة ، ستحتاج إلى شيء مثل هذا الرمز.


poco("btn_start").click() 

أي سيبدو هذا الاختبار الأبسط بناءً على لعبة تجريبية تتحقق من الضغط على الأزرار الموجودة على الشاشة الرئيسية "ابدأ" و "الخلف" (من قسم GlobalControl)


 # -*- encoding=utf8 -*- __author__ = "authorName" from airtest.core.api import * auto_setup(__file__) from poco.drivers.unity3d import UnityPoco poco = UnityPoco() poco("btn_start").click() poco("btn_back").click() 

ما يحدث في الواقع: يعثر البرنامج على العنصر المشار إليه في الكود ، وبعد أداء موقعه على الشاشة ، يؤدي الوظيفة المطلوبة. يمكن العثور على جميع هذه العمليات والبيانات اللازمة (على سبيل المثال ، موقع الكائن وعدد النقرات عليه وما إلى ذلك) في التقرير ، ويمكن إنشاء التقرير نفسه باستخدام اختصار لوحة المفاتيح Ctrl + L. لاحظ أن أسماء / عناوين الأزرار مأخوذة من حساب وجودها على الشاشة الحالية.


كيف يبدو كل شيء في الإصدار الأخير من AirTest IDE (1.2.2) يمكن رؤيته تحت المفسد.


اكتشاف واستخدام الأزرار مع Poco

كشف والنقر على زر ابدأ


كشف والنقر فوق الزر السابق على شاشة جديدة


أنواع العناصر


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


سيتم تقديم أمثلة للعناصر بناءً على إحدى شاشات اللعبة التجريبية.


صورة


يحتوي هذا المثال على العناصر التالية:


  • النص - تحتوي هذه الشاشة على 3 أنواع منها. سيتم إخفاء الأمثلة تحت المفسدين.

مثال العنوان

صورة


مثال عنصر نائب

صورة


النص على العنصر (زر)

صورة


  • الصورة - في المثال أعلاه - نجمة.

مثال صورة

صورة


  • حقل الإدخال - حقل إدخال النص في حالتنا

مثال InputField

صورة


  • الزر هو زر الخلف في مثالنا ، ولكن تحت المفسد سيكون هناك مثال على زر آخر ، لأنه العودة لا تتلاءم تماما مع الشاشة المدمجة

مثال زر

صورة


  • العقدة - لست متأكداً من كيفية وصفها ، لكنها في الواقع حاوية للعناصر.

مثال العقدة

صورة


الشجرة الموسعة لجميع العناصر من المثال أعلاه هي كما يلي
صورة


وأكثر من ذلك بقليل حول الترميز


حاليًا ، يوفر AirTest IDE 34 فريقًا للتفاعل مع العناصر. يتم عرض قائمتهم تلقائيًا في نافذة منبثقة بعد إدخال نقطة بعد عنصر التفاعل. لسبب لا أفهمه ، يمكن استدعاء جميع الأوامر لأي نوع من العناصر. هل هذا يعني أن جميع الأوامر يمكن استخدامها لجميع أنواع العناصر؟ لا أعرف حتى الآن ، لم يكن هناك طريقة للتحقق. للراحة ، يمكن الاطلاع على القائمة الحالية تحت المفسد.


قائمة الوظائف للتفاعل مع العناصر في Poco
 add_post_action_callback add_pre_action_callback agent click freeze get_screen_size long_click sleep_for_polling_interval snapshot wait_for_all swipe wait_for_any wait_stableattr child children click (   ,     ) drag_to exists focus get_bounds get_name get_position get_size get_text invalidate nodes offspring set_text setattr sibling swipe (   ,     ) wait wait_for_appearance wait_for_disappearance 

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


متغير الصورة
 star = poco("star_single") if star.exists(): pos = star.get_position() 

متغير كائن الإدخال
 input_field = poco("pos_input") time.sleep(1) input_field.set_text('x={:.02f}, y={:.02f}'.format(*pos)) time.sleep(3) 

متغير زر
 title = poco('title').get_text() if title == "Basic test": back = poco('btn_back', type='Button') back.click() back.click() 

ذكرت أعلاه أن المتغيرات يمكن أن توفر لك بعض المتاعب. على وجه الخصوص ، واجهت مشكلة في وحدة السحب والإفلات في اللعبة التجريبية. يحتوي على 5 نجوم (صور) ومهمة اللاعب هي نقلها إلى الغلاف ، والذي يقع أسفل صف النجوم مباشرة. تجدر الإشارة إلى أن المشكلة تنشأ فور وصولك مباشرة إلى مجموعة العناصر "النجمية": بعد سحب العنصر إلى الموضع المطلوب ، تختفي. يأخذ AirTest IDE في الاعتبار العناصر المرئية فقط ، وبالتالي ، بعد أن أصبح النجم المنقول غير مرئي ، لا يمكن للكود الوصول إليه مباشرة. إذا قمت بالوصول مباشرة إلى مجموعة النجوم ، فسيتم إعادة تهيئتها ، لأن لقد تغير عدد العناصر فيه. أي لن ينقل الإدخال التالي جميع العناصر الخمسة إلى الغلاف


 poco("playDragAndDrop").child("star")[0].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[1].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[2].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[3].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[4].drag_to(poco("shell")) 

سيساعدك تخزين تهيئة الصفيف في متغير على تجنب إعادة تهيئة الصفيف بعد كل تغيير في عدد عناصره المرئية. في هذه الحالة ، سيبدو جاذبية عناصرها كما يلي:


 stars = poco("playDragAndDrop").child("star") stars[0].drag_to(poco("shell")) stars[1].drag_to(poco("shell")) 

وفقًا لذلك ، يمكنك أيضًا تخزين موضع عنصر shell في متغير منفصل حتى لا يتم الوصول إليه مباشرةً في كل مرة.


ما هي النتيجة؟


AirTest IDE هي مجموعة قوية إلى حد ما من الأدوات لاختبار واجهة المستخدم في الألعاب والأنظمة المعقدة الأخرى على Windows ونظام التشغيل المحمول. يعمل اكتشاف العناصر الضرورية بشكل صحيح في معظم الحالات ، القدرة على كتابة الاختبارات من نقطة الصفر ، ودعم العديد من لغات البرمجة ، ومعلومات مفصلة إلى حد ما حول نتائج الاختبار التشغيل في التقرير ، والتي يمكن إنشاؤها باستخدام IDE نفسه ، وكذلك تكلفة مجموعة الأدوات نفسها (أذكركم بأن AirTest IDE هو تطبيق مفتوح المصدر) - كل هذا يتم تشغيله في أيدي AirTest IDE وهو سبب وجيه لمحاولة على الأقل ، وعلى الأقل تطبيق هذه الأداة في نظام التشغيل الآلي الخاص بك. يجب أن يؤخذ في الاعتبار أنه على الرغم من أن AirTest قد صمم لاختبار الألعاب ، فإنه لا يهدف إلى أتمتة طريقة اللعب. يقوم Airtest IDE بعمل ممتاز للأشياء "الثابتة" ، على سبيل المثال ، البحث عن عناصر معينة على الشاشة ، والعمل مع عناصر واجهة المستخدم ، على سبيل المثال ، التسوق في متاجر الألعاب ، إلخ. تتكيف IDE مع هذه المهام بشكل مثالي ويمكن نصحها بالتشغيل الآلي البسيط والموثوق للتطبيقات الخاصة بك مع حد دخول منخفض للمبتدئين في هذا العمل!


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


إذا كان لديك بالفعل خبرة في استخدام AirTest IDE ، فسيكون رائعًا أن تشاركه في التعليقات ، وإذا وجدت أخطاء ، فيمكنك ترك تقرير الأخطاء الخاص بها على الصفحة المقابلة !

Source: https://habr.com/ru/post/ar464181/


All Articles