Descriptживе програмування в QTP/UFTДинамічний та статичний

⚡ Розумний підсумок

DescriptЖиве програмування дозволяє QTP or UFT Один оператор містить сам опис об'єкта у вигляді пар значень властивостей або у вигляді Descriptоб'єкт ion, тому крок виконується навіть тоді, коли об'єкт ніколи не зберігався в репозиторії об'єктів.

  • 🔘 Обходить репозиторій: Опис передається всередині оператора, тому під час виконання не потрібно шукати ім'я об'єкта.
  • ☑️ Статична форма: Пари значень властивостей, записані всередині рядка як «властивість:=значення», розділені комами всередині виклику тестового об'єкта.
  • Динамічна форма: Description.Create створює колекцію властивостей повторного використання, яку можуть використовувати багато операторів.
  • 🧪 Створено для непередбачуваних об'єктів: Автоматичне приховування панелей, зміна ієрархій, вкладені внутрішні об'єкти та набори результатів невідомого розміру.
  • 🛠️ ChildObjects поєднується з ним: A DescriptОб'єкт ion, що використовується як фільтр, повертає лише відповідні дочірні об'єкти батьківського об'єкта.
  • 📌 Два правила, які слід пам'ятати: Кожне значення властивості обробляється як регулярний вираз, і після опису батьківського об'єкта необхідно описати і його дочірні об'єкти.

Статичні та динамічні оператори описового програмування в QTP та  UFT Один

Що таке DescriptВи програмуєте?

Descriptive програмування використовується для виконання операцій над об'єктом у AUT, визначення якого не зберігається в Репозиторій об'єктівВикористовуючи цей механізм, ви можете обійти ідентифікацію з репозиторію об'єктів та надати об'єкт Descriptіон у самій заяві.

Ім'я об'єкта використовується просто для зіставлення об'єкта у скрипті з його описом у сховищі об'єктів. Це означає, що якщо ви зміните ім'я об'єкта як у вашому скрипті, так і в сховищі об'єктів, скрипт все одно має працювати. Перегляньте наступне відео про цю концепцію.

Натисніть тут якщо відео недоступне

Відео Основні

  • Видалити об'єкт DescriptІон поля WinEdit імені агента з репозиторію об'єктів. Якщо ви запустите тест ще раз, він не спрацює, оскільки не може розпізнати об'єкт. Давайте розглянемо причину, чому скрипт не працює.
  • Під час виконання, UFT Один визначає операцію, яка виконується над полем WinEdit, та об'єкт DescriptІон у сховищі об'єктів зберігається як Ім'я агента. Він використовує це ім'я для track об'єкт у репозиторії об'єктів. Для батьківського об'єкта не може бути двох дочірніх об'єктів з однаковим ім'ям, тому QTP унікально відображає об'єкт у репозиторії. Потім він використовує збережений опис у репозиторії об'єктів, замінює назву описом та використовує отриманий оператор для ідентифікації об'єкта в тестованій програмі.
  • Оскільки в нашому випадку ми повністю видалили цей опис об'єкта, скрипт не працює
  • Але що, якби замість того, QTP замінюючи опис об'єкта, ви як тестувальник безпосередньо вказуєте описи об'єктів у своєму скрипті? Це не що інше, як «Descriptive програмування”

Цю єдину зміну відповідальності реалізують дві форми, наведені нижче, і кожна з них підходить для різного типу сценарію.

Види DescriptПрограмування

Ви можете використовувати Descriptпрограмування двома способами

  1. Статичний
  2. Dynamic

Статичний DescriptПрограмування

У статичному методі для ідентифікації об’єкта ви вказуєте властивість об’єкта в такому форматі

property:=values,

Цей формат називається парою значень властивості та береться в лапки. Повністю статичний оператор виглядає так:

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

Якщо ваш об'єкт використовує кілька описів для ідентифікації, ви можете вказати їх за допомогою ком

Отже, у нашому випадку стає опис для імені агента

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

Статичні описи зчитуються в момент виконання оператора, що робить їх ідеальними для одноразових кроків та швидкого виправлення скрипта, який не потрібно перезаписувати.

Dynamic DescriptПрограмування

Другий спосіб виконання тієї ж дії — використання Dynamic Descriptive програмування

Якщо ваш сценарій використовує описовий об’єкт-кандидат програмування кілька разів, буде дуже втомливо вказувати всі пари значень властивості для кожного оператора

У таких випадках ви можете скористатися DescriptКлас іонів надано 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:"

Змінна Опис тепер можна передати будь-якому оператору, якому потрібен цей об'єкт, тому одне редагування оновлює кожен крок, який його використовує.

Статичний проти динамічного DescriptЖиве програмування: коли використовувати кожен з них

Обидві форми створюють однаковий опис виконання, тому вибір стосується обслуговування, а не можливостей.

Критерії Статичний (вбудований) Динамічний (Descriptіонний об'єкт)
Як написаний опис Пари значень властивостей, введені всередині виклику тестового об'єкта Властивості, додані до об'єкта, створеного за допомогою Description.Create()
Повторне використання Повторюється в кожному операторі, який потребує об'єкта Зберігається в одній змінній та передається куди завгодно
читабельність Короткі твердження залишаються читабельними; довгі стають громіздкими Додаткові рядки налаштування, але сам оператор залишається коротким
Зміни під час виконання Значення фіксовані, якщо вони не об'єднані зі змінних Значення властивостей можна перепризначити перед кожним використанням
Працює з дочірніми об'єктами Ні, аргумент фільтра має бути Descriptіонний об'єкт Так, це обов'язкова форма
Найкраще підходить для Один або два кроки для об'єкта, якого немає в репозиторії Об'єкти, що використовуються повторно, або колекції, отримані під час виконання

Навіщо використовувати DescriptВи програмуєте?

Наведена нижче стенограма супроводжує відеоінструкцію з реального сценарію, коли кількість об'єктів не може бути відома заздалегідь.

Транскрипція відео

  • Питання на мільйон доларів: навіщо використовувати DP, коли процес ідентифікації об'єктів обробляється... QTP
  • Припустимо, вам доручено протестувати портал вакансій. Ви вводите пошуковий запит на порталі, і ваш тест очікує, що ви виберете всі доступні вакансії та натиснете «Подати заявку».
  • Але кількість відображених вакансій залежатиме від пошукового запиту та вакансій, доступних на момент виконання скрипта, і немає можливості заздалегідь передбачити кількість вакансій, які будуть відображені.
  • У таких випадках можна використовувати описове програмування. Навіть якщо ви не знаєте кількість та назви прапорців, ви знаєте клас для об'єктів як «WebCheckBox"
  • Ви можете використовувати Метод ChildObjects щоб повернути об'єкти, що належать певному батьківському
  • Рядок коду на зразок –
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    поверне всі дочірні об'єкти для цієї сторінки.

  • Але ми хочемо лише WebCheckBox об'єкти. Для цього ми можемо створити об'єкт фільтра та встановити його властивість як клас веб-прапорця, а потім передати цей фільтр як аргумент методу ChildObjects
  • У цьому випадку повертаються лише прапорці.
  • Далі ви можете написати подібний код, який отримує доступ до всієї колекції прапорців, починаючи з нуля, та встановлює всі прапорці у положення ON.
  • Далі ви можете натиснути кнопку застосувати, щоб завершити тест
  • Vous використання aussi можете оплатити DescriptПрограмування для запуску об’єктів, які важко записати, як-от автоматично приховувані панелі, об’єкти зі змінною ієрархією, вкладені внутрішні об’єкти, підменю.
  • Ви також можете виконувати розширені маніпуляції з рядками за допомогою описового програмування
  • У поєднанні з властивістю індексу, описове програмування може бути дуже корисним для ідентифікації складних об'єктів.
  • Якщо ви використовуєте програмний опис для об'єкта в ієрархії об'єктів, вам потрібно буде використовувати описове програмування для наступних дочірніх об'єктів.
  • Наприклад, якщо для об'єкта Page було використано описове програмування, але наступний дочірній об'єкт WinEdit походить з репозиторію об'єктів, твердження є невірним.
  • Навпаки, коли описове програмування використовується як для об'єктів Page, так і для об'єктів 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"

Перш ніж розпочати налагодження програми, варто перевірити ще три підводні камені:

  • Скористайтеся кнопкою мікроклас, а не етикетка Назва класу показано в Object Spy. Відображуване ім'я не є дійсною властивістю в описі.
  • Назви властивостей не враховують регістр, але їх потрібно писати точно так, як їх повідомляє технологія, включаючи пробіли. доданий текст та тег html.
  • DescriptАктивне програмування обходить репозиторій; воно не покращує розпізнавання об'єктів. Якщо не завантажено правильну надбудову, жоден опис не зробить об'єкт ідентифікованим.

Поширені запитання

точка Об'єктний шпигун на елементі керування та зчитати його ідентифікаційні властивості або викликати GetROProperty під час виконання. Скопіюйте назви точно так, як зазначено, пам'ятаючи, що Object Spy відображає micclass під міткою Class Name.

Зазвичай ні. Пошук у репозиторії вирішує збережений опис один раз, тоді як оператор described обчислюється щоразу, коли виконується рядок. Перевагою описового програмування є гнучкість щодо непередбачуваних об'єктів, а не чиста швидкість.

Створіть Descriptоб'єкт ion всередині функції повторного використання та зберігати цю функцію в vbscript бібліотека функцій, пов'язана з тестом. Кожна дія, яка завантажує бібліотеку, може потім викликати її, тому одне редагування оновлює всі викликаючі функції.

Ідентифікація за допомогою штучного інтелекту зіставляє елементи керування за візуальним виглядом та текстом підпису поруч, а не за фіксованими властивостями, що усуває деякі рукописні описи. DescriptІони все ще потрібні там, де об'єкти підраховуються або фільтруються під час виконання.

Копілот може створювати каркаси для петель, Description.Create виклики та звіти на основі опису, але не може бачити вашу програму. Кожне ім'я властивості та значення, яке він пропонує, має бути підтверджено з реальним елементом керування, перш ніж оператор буде визнано довіреним.

Рідко. А спільне сховище об'єктів зберігає описи в одному місці, де їх можна редагувати, та забезпечує читабельність скриптів. Більшість команд зберігають стабільні екрани в репозиторії та звертаються до описів лише там, де об'єкти є динамічними.

Зменште його до однієї властивості, а потім додавайте інші по одній. Перевірка кількості об'єктів за допомогою фільтра ChildObjects показує, чи опис нічого не відповідає, чи неоднозначно відповідає кільком об'єктам.

Так. Це працює для будь-якої технології, для якої завантажено надбудову, включаючи стандартну. Windows, веб, .NET, Java та об'єкти емулятора терміналу. Відрізняються лише назви властивостей, оскільки кожна надбудова повідомляє про власні властивості ідентифікації.

Підсумуйте цей пост за допомогою: