Descriptживе програмування в QTP/UFTДинамічний та статичний
⚡ Розумний підсумок
DescriptЖиве програмування дозволяє QTP or UFT Один оператор містить сам опис об'єкта у вигляді пар значень властивостей або у вигляді Descriptоб'єкт ion, тому крок виконується навіть тоді, коли об'єкт ніколи не зберігався в репозиторії об'єктів.
Що таке DescriptВи програмуєте?
Descriptive програмування використовується для виконання операцій над об'єктом у AUT, визначення якого не зберігається в Репозиторій об'єктівВикористовуючи цей механізм, ви можете обійти ідентифікацію з репозиторію об'єктів та надати об'єкт Descriptіон у самій заяві.
Ім'я об'єкта використовується просто для зіставлення об'єкта у скрипті з його описом у сховищі об'єктів. Це означає, що якщо ви зміните ім'я об'єкта як у вашому скрипті, так і в сховищі об'єктів, скрипт все одно має працювати. Перегляньте наступне відео про цю концепцію.
Натисніть тут якщо відео недоступне
Відео Основні
- Видалити об'єкт DescriptІон поля WinEdit імені агента з репозиторію об'єктів. Якщо ви запустите тест ще раз, він не спрацює, оскільки не може розпізнати об'єкт. Давайте розглянемо причину, чому скрипт не працює.
- Під час виконання, UFT Один визначає операцію, яка виконується над полем WinEdit, та об'єкт DescriptІон у сховищі об'єктів зберігається як Ім'я агента. Він використовує це ім'я для track об'єкт у репозиторії об'єктів. Для батьківського об'єкта не може бути двох дочірніх об'єктів з однаковим ім'ям, тому QTP унікально відображає об'єкт у репозиторії. Потім він використовує збережений опис у репозиторії об'єктів, замінює назву описом та використовує отриманий оператор для ідентифікації об'єкта в тестованій програмі.
- Оскільки в нашому випадку ми повністю видалили цей опис об'єкта, скрипт не працює
- Але що, якби замість того, QTP замінюючи опис об'єкта, ви як тестувальник безпосередньо вказуєте описи об'єктів у своєму скрипті? Це не що інше, як «Descriptive програмування”
Цю єдину зміну відповідальності реалізують дві форми, наведені нижче, і кожна з них підходить для різного типу сценарію.
Види DescriptПрограмування
Ви можете використовувати Descriptпрограмування двома способами
- Статичний
- 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Активне програмування обходить репозиторій; воно не покращує розпізнавання об'єктів. Якщо не завантажено правильну надбудову, жоден опис не зробить об'єкт ідентифікованим.
