Descriptالبرمجة الحية في QTP/UFTالديناميكي والثابت

⚡ ملخص ذكي

Descriptتتيح البرمجة التفاعلية QTP or UFT يحمل أحد العبارات وصف الكائن نفسه، إما كأزواج من قيم الخصائص أو كـ Descriptكائن ion، لذلك يتم تشغيل الخطوة حتى عندما لم يتم تخزين الكائن مطلقًا في مستودع الكائنات.

  • 🔘 يتجاوز المستودع: ينتقل الوصف داخل العبارة، لذلك لا يلزم البحث عن اسم الكائن في وقت التشغيل.
  • ☑️ النموذج الثابت: يتم كتابة أزواج قيم الخصائص بشكل مضمن كـ "property:=value"، مفصولة بفواصل داخل استدعاء كائن الاختبار.
  • الشكل الديناميكي: Descriptتقوم الدالة ion.Create بإنشاء مجموعة خصائص قابلة لإعادة الاستخدام يمكن للعديد من العبارات مشاركتها.
  • 🧪 مصمم للتعامل مع الأجسام غير المتوقعة: إخفاء اللوحات تلقائيًا، وتغيير التسلسلات الهرمية، والكائنات الداخلية المتداخلة، ومجموعات النتائج ذات الحجم غير المعروف.
  • 🛠️ تتطابق كائنات ChildObjects معها: A Descriptيُعيد كائن ion المستخدم كمرشح فقط العناصر الفرعية المطابقة للعنصر الأب.
  • 📌 قاعدتان يجب تذكرهما: يتم التعامل مع كل قيمة خاصية على أنها تعبير نمطي، وبمجرد وصف أحد الوالدين، يجب عليك وصف أبنائه أيضًا.

عبارات البرمجة الوصفية الثابتة والديناميكية في QTP و UFT واحد

ما هي تفاصيل Descriptايف البرمجة؟

Descriptإيف البرمجة يُستخدم لتنفيذ عمليات على كائن في نظام الاختبار الآلي (AUT) الذي لم يتم تخزين تعريفه في مستودع الكائنباستخدام هذه الآلية، يمكنك تجاوز عملية تحديد الهوية من مستودع الكائنات وتوفير الكائن Descriptايون في البيان نفسه.

يُستخدم اسم الكائن ببساطة لربط الكائن في البرنامج النصي بوصفه في مستودع الكائنات. هذا يعني أنه إذا قمت بتغيير اسم الكائن في كلٍّ من البرنامج النصي ومستودع الكائنات، فسيظل البرنامج النصي يعمل. شاهد الفيديو التالي لشرح هذا المفهوم.

انقر اضغط هنا إذا لم يكن من الممكن الوصول إلى الفيديو

ويبرز الفيديو

  • احذف الكائن Descriptيظهر مربع "اسم الوكيل" في نافذة "WinEdit" من مستودع الكائنات. إذا أعدت تشغيل الاختبار، فسيفشل لأنه لا يستطيع التعرف على الكائن. دعونا نفحص سبب فشل البرنامج النصي.
  • أثناء وقت التشغيل، UFT يحدد المرء العملية التي يتم تنفيذها على مربع WinEdit، والكائن Descriptيُخزَّن العنصر في مستودع الكائنات باسم "اسم الوكيل". ويستخدم هذا الاسم لـ track الكائن في مستودع الكائنات. بالنسبة للكائن الأصل، لا يمكنك أن يكون لديك كائنان فرعيان بنفس الاسم، لذلك QTP يُحدد هذا الإجراء الكائن في المستودع بشكل فريد. ثم يستخدم الوصف المخزن في مستودع الكائنات، ويستبدل الاسم بالوصف، ويستخدم العبارة الناتجة لتحديد الكائن في التطبيق قيد الاختبار.
  • بما أننا في حالتنا قد حذفنا وصف هذا الكائن بالكامل، فإن البرنامج النصي يفشل
  • لكن ماذا لو، بدلاً من QTP هل تقوم أنت كمختبِر بتحديد أوصاف الكائنات مباشرةً في البرنامج النصي الخاص بك بدلاً من استبدال وصف الكائن؟ هذا ليس سوى "Descriptإيف البرمجة"

إن هذا التغيير الوحيد في المسؤولية هو ما تنفذه الصيغتان أدناه، وكل صيغة تناسب نوعًا مختلفًا من النصوص البرمجية.

انواع من Descriptإيف البرمجة

يمكنك استخدام Descriptالبرمجة إيف بطريقتين

  1. ساكن
  2. التفاعل

ساكن Descriptإيف البرمجة

في الطريقة الثابتة، لتحديد هوية الكائن، يمكنك تحديد خاصية الكائن بالتنسيق التالي

property:=values,

يُطلق على هذا التنسيق اسم زوج قيمة الخاصية، ويُحاط بعلامات اقتباس. عند كتابة العبارة الثابتة كاملةً، تبدو كالتالي:

TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method

إذا كان العنصر الخاص بك يستخدم أوصافًا متعددة للتعريف، فيمكنك تحديدها باستخدام الفواصل.

لذلك في حالتنا، يصبح وصف اسم الوكيل

"nativeclass:=Edit", "attached text:=Agent Name:"

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

التفاعل Descriptإيف البرمجة

الطريقة الثانية للقيام بنفس الإجراء هي استخدام Dynamic Descriptإيف البرمجة

في حالة استخدام البرنامج النصي الخاص بك لمرشح كائن البرمجة الوصفي عدة مرات، فسيكون من المتعب للغاية تحديد جميع أزواج قيمة الخاصية لكل عبارة

في مثل هذه الحالات، يمكنك الاستفادة من Descriptفئة ion مقدمة من QTP

صيغة إنشاء كائن وصف هي

Set MyDescription = Description.Create()
MyDescription("property").Value = "property-value"

هذه هي الطريقة الديناميكية

يؤدي ملء هذا الكائن بخصائص اسم الوكيل المستخدمة أعلاه إلى وصف كامل وقابل لإعادة الاستخدام:

Dim oDesc
Set oDesc = Description.Create()
oDesc("nativeclass").Value = "Edit"
oDesc("attached text").Value = "Agent Name:"

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

ثابت مقابل ديناميكي Descriptالبرمجة الحية: متى يُستخدم كل منها

ينتج كلا الشكلين نفس وصف وقت التشغيل، لذا فإن الاختيار يتعلق بالصيانة وليس بالقدرة.

المعايير ثابت (مضمن) متحرك (Descript(جسم أيوني)
كيفية كتابة الوصف أزواج قيم الخصائص المكتوبة داخل استدعاء كائن الاختبار الخصائص المضافة إلى كائن تم إنشاؤه باستخدام Description.Create()
إعادة استخدام يتكرر في كل عبارة تحتاج إلى الكائن يتم تخزينها في متغير واحد وتمريرها أينما دعت الحاجة
قراءة تبقى العبارات القصيرة سهلة القراءة؛ أما العبارات الطويلة فتصبح معقدة. سطور تمهيدية إضافية، لكن البيان نفسه يبقى قصيرًا
تغييرات وقت التشغيل تكون القيم ثابتة ما لم يتم دمجها من متغيرات. يمكن إعادة تعيين قيم الخصائص قبل كل استخدام
يعمل مع العناصر الفرعية لا، يجب أن تكون وسيطة التصفية من نوع Descriptجسم أيوني نعم، هذا هو النموذج المطلوب
أفضل مناسب لـ خطوة أو خطوتين على عنصر غير موجود في المستودع الكائنات المستخدمة بشكل متكرر، أو المجموعات التي يتم استرجاعها في وقت التشغيل

لماذا الاستخدام Descriptايف البرمجة؟

النص المكتوب أدناه يرافق شرح الفيديو التوضيحي لسيناريو حقيقي لا يمكن فيه معرفة عدد الأشياء مسبقًا.

نسخة فيديو

  • السؤال الذي يطرح نفسه هو: لماذا نستخدم البرمجة الديناميكية (DP) عندما تتم معالجة عملية تحديد الكائنات بواسطة QTP
  • لنفترض أنك مكلف باختبار بوابة توظيف. تقوم بإدخال استعلام بحث في البوابة، ويتوقع منك الاختبار تحديد جميع الوظائف المتاحة والنقر على "تقديم الطلب".
  • لكن عدد الوظائف المعروضة سيعتمد على استعلام البحث والوظائف المتاحة وقت تنفيذ البرنامج النصي، ولا توجد طريقة للتنبؤ مسبقًا بعدد الوظائف التي ستظهر.
  • في مثل هذه الحالات، يمكنك استخدام البرمجة الوصفية. على الرغم من أنك لا تعرف عدد وأسماء مربعات الاختيار، إلا أنك تعرف فئة الكائنات باسم "WebCheck".Box"
  • يمكنك استخدام طريقة ChildObjects لإرجاع الأشياء التي تنتمي إلى والد معين
  • سطر من التعليمات البرمجية مثل -
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    سيعيد هذا جميع العناصر الفرعية لهذه الصفحة.

  • لكننا نريد WebCheck فقطBox الكائنات. وللقيام بذلك، يمكننا إنشاء كائن تصفية وتعيين خاصيته إلى فئة مربع الاختيار على الويب، ثم تمرير هذا الفلتر كوسيط إلى طريقة ChildObjects
  • في هذه الحالة، سيتم إرجاع مربعات الاختيار فقط.
  • بعد ذلك، يمكنك كتابة كود مثل هذا، والذي يصل إلى المجموعة الكاملة من مربعات الاختيار بدءًا من الصفر ويضبط جميع مربعات الاختيار على وضع التشغيل.
  • وبعد ذلك، يمكنك النقر فوق زر "تطبيق" لإكمال الاختبار
  • يمكنك أيضا استخدام Descriptبرمجة ive لتشغيل الكائنات التي يصعب تسجيلها مثل الألواح المخفية تلقائيًا، والكائنات ذات التسلسلات الهرمية المتغيرة، والكائنات الداخلية المتداخلة، والقوائم الفرعية.
  • يمكنك أيضًا إجراء عمليات معالجة متقدمة للسلسلة باستخدام البرمجة الوصفية
  • بالإضافة إلى خاصية الفهرس، يمكن أن تكون البرمجة الوصفية مفيدة للغاية في تحديد الكائنات الصعبة.
  • إذا كنت تستخدم وصفًا برمجيًا لكائن في تسلسل هرمي للكائنات، فستحتاج إلى استخدام البرمجة الوصفية للكائنات الفرعية اللاحقة.
  • على سبيل المثال، إذا تم استخدام البرمجة الوصفية لكائن الصفحة ولكن كائن WinEdit الفرعي اللاحق جاء من مستودع الكائنات، فإن العبارة غير صحيحة
  • على العكس من ذلك، عندما يتم استخدام البرمجة الوصفية لكل من كائن الصفحة وكائن WinEdit، تكون العبارة صحيحة

عند كتابة الكود، يبدو كل من المرشح والحلقة الموصوفة في النص كما يلي:

Dim oFilter, allCheckBoxes, i
Set oFilter = Description.Create()
oFilter("micclass").Value = "WebCheckBox"
Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter)
For i = 0 To allCheckBoxes.Count - 1
    allCheckBoxes(i).Set "ON"
Next

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

التعبيرات النمطية، والمعرّفات الترتيبية، والمزالق الشائعة

Descriptتتصرف البرمجة الحية بطريقتين تفاجئان معظم الناس في المرة الأولى التي تفشل فيها عبارة ما دون سبب واضح.

1) يتم التعامل مع كل قيمة خاصية على أنها تعبير نمطي. تعليق مثل المجموع (بالدولار الأمريكي) لذلك، لا تتم المطابقة لأن الأقواس هي صيغة تعبير نمطي. استخدم شرطة مائلة عكسية للهروب منها، أو قم بإيقاف تقييم التعبير النمطي لتلك الخاصية. Descriptكائن أيوني:

Set oDesc = Description.Create()
oDesc("name").Value = "Total (USD)"
oDesc("name").RegularExpression = False

2) تُستخدم المعرفات الترتيبية لفض التعادلات. عندما يتطابق وصف ما مع أكثر من عنصر واحد، أضف مؤشر, موقع or وقت الإنشاء كخاصية إضافية. يبدأ عدد الفهارس من الصفر:

WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99"
WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"

هناك ثلاثة مآزق أخرى تستحق التحقق منها قبل البدء في تصحيح أخطاء التطبيق:

  • استعمل ميك كلاسليس الملصق اسم الفصل يظهر في أداة فحص الكائنات. اسم العرض ليس خاصية صالحة في الوصف.
  • أسماء العقارات غير حساسة لحالة الأحرف، ولكن يجب تهجئتها تمامًا كما يعرضها النظام التقني، بما في ذلك المسافة في النص المرفق و علامة HTML.
  • Descriptتتجاوز البرمجة المباشرة المستودع؛ فهي لا تُحسّن من التعرف على الكائنات. إذا لم يتم تحميل الإضافة الصحيحة، فلن يكون هناك وصف يجعل الكائن قابلاً للتحديد.

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

البوينت كائن تجسس قم بفحص عنصر التحكم واقرأ خصائص تعريفه، أو استدعِ الدالة GetROProperty أثناء التشغيل. انسخ الأسماء كما هي مُدرجة تمامًا، مع الأخذ في الاعتبار أن أداة Object Spy تعرض micclass تحت مُسمى "اسم الفئة".

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

بناء Descriptقم بإنشاء كائن ion داخل دالة قابلة لإعادة الاستخدام، واحتفظ بتلك الدالة في فبسكريبت مكتبة الدوال المرتبطة بالاختبار. يمكن لكل إجراء يقوم بتحميل المكتبة استدعاؤها، لذا فإن تعديلًا واحدًا يُحدّث جميع المستدعين.

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

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

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

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

نعم. إنه يعمل مع أي تقنية يتم تحميل الملحق الخاص بها، بما في ذلك التقنية القياسية. Windows، الويب، .NET، Java وكائنات محاكي الطرفية. تختلف أسماء الخصائص فقط، حيث أن كل إضافة تُبلغ عن خصائص تعريفها الخاصة.

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