Descriptالبرمجة الحية في QTP/UFTالديناميكي والثابت
⚡ ملخص ذكي
Descriptتتيح البرمجة التفاعلية QTP or UFT يحمل أحد العبارات وصف الكائن نفسه، إما كأزواج من قيم الخصائص أو كـ Descriptكائن ion، لذلك يتم تشغيل الخطوة حتى عندما لم يتم تخزين الكائن مطلقًا في مستودع الكائنات.
ما هي تفاصيل Descriptايف البرمجة؟
Descriptإيف البرمجة يُستخدم لتنفيذ عمليات على كائن في نظام الاختبار الآلي (AUT) الذي لم يتم تخزين تعريفه في مستودع الكائنباستخدام هذه الآلية، يمكنك تجاوز عملية تحديد الهوية من مستودع الكائنات وتوفير الكائن Descriptايون في البيان نفسه.
يُستخدم اسم الكائن ببساطة لربط الكائن في البرنامج النصي بوصفه في مستودع الكائنات. هذا يعني أنه إذا قمت بتغيير اسم الكائن في كلٍّ من البرنامج النصي ومستودع الكائنات، فسيظل البرنامج النصي يعمل. شاهد الفيديو التالي لشرح هذا المفهوم.
انقر اضغط هنا إذا لم يكن من الممكن الوصول إلى الفيديو
ويبرز الفيديو
- احذف الكائن Descriptيظهر مربع "اسم الوكيل" في نافذة "WinEdit" من مستودع الكائنات. إذا أعدت تشغيل الاختبار، فسيفشل لأنه لا يستطيع التعرف على الكائن. دعونا نفحص سبب فشل البرنامج النصي.
- أثناء وقت التشغيل، UFT يحدد المرء العملية التي يتم تنفيذها على مربع WinEdit، والكائن Descriptيُخزَّن العنصر في مستودع الكائنات باسم "اسم الوكيل". ويستخدم هذا الاسم لـ track الكائن في مستودع الكائنات. بالنسبة للكائن الأصل، لا يمكنك أن يكون لديك كائنان فرعيان بنفس الاسم، لذلك QTP يُحدد هذا الإجراء الكائن في المستودع بشكل فريد. ثم يستخدم الوصف المخزن في مستودع الكائنات، ويستبدل الاسم بالوصف، ويستخدم العبارة الناتجة لتحديد الكائن في التطبيق قيد الاختبار.
- بما أننا في حالتنا قد حذفنا وصف هذا الكائن بالكامل، فإن البرنامج النصي يفشل
- لكن ماذا لو، بدلاً من QTP هل تقوم أنت كمختبِر بتحديد أوصاف الكائنات مباشرةً في البرنامج النصي الخاص بك بدلاً من استبدال وصف الكائن؟ هذا ليس سوى "Descriptإيف البرمجة"
إن هذا التغيير الوحيد في المسؤولية هو ما تنفذه الصيغتان أدناه، وكل صيغة تناسب نوعًا مختلفًا من النصوص البرمجية.
انواع من Descriptإيف البرمجة
يمكنك استخدام Descriptالبرمجة إيف بطريقتين
- ساكن
- التفاعل
ساكن 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تتجاوز البرمجة المباشرة المستودع؛ فهي لا تُحسّن من التعرف على الكائنات. إذا لم يتم تحميل الإضافة الصحيحة، فلن يكون هناك وصف يجعل الكائن قابلاً للتحديد.
