Порядковий ідентифікатор у QTP/UFTПриклад ідентифікації об'єкта

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

Порядковий ідентифікатор у QTP/UFT є тай-брейком UFT застосовується, коли обов'язкові та допоміжні властивості все ще відповідають кільком об'єктам, використовуючи значення Index, Location або CreationTime для вибору одного унікального об'єкта.

  • 🎯 Останній притулок: UFT додає порядковий ідентифікатор лише після того, як обов'язкові та допоміжні властивості не зможуть зробити опис унікальним.
  • 🔢 Індекс: Numbers об'єкти одного класу за порядком вихідного коду, починаючи з 0, тому index:=3 орієнтується на четвертий збіг.
  • 📍 Місцезнаходження: Numbers об’єкти за положенням на екрані всередині вікна, рамки або діалогового вікна, зверху вниз і зліва направо.
  • 🕒 Час створення: Застосовується лише до об'єктів браузера та записує порядок, у якому відкривався кожен екземпляр браузера.
  • 🗂️ Ідентифікація об'єкта: Порядковий тип за замовчуванням для кожного класу тестових об'єктів можна редагувати в розділі Інструменти > Ідентифікація об'єктів.
  • ⌨️ Descriptживе програмування: Передайте індекс, розташування або час створення як звичайну властивість всередині рядка опису об'єкта.
  • ⚠️ Крихкість: Порядкові значення змінюються щоразу, коли змінюється макет сторінки, тому ставтеся до них як до тимчасового виправлення, а не як до дизайнерського рішення.

Порядковий ідентифікатор у QTP/UFT пояснено за допомогою індексу, розташування та часу створення

Що таке порядковий ідентифікатор у QTP/UFT?

An Порядковий ідентифікатор є числовою властивістю, яка UFT (раніше QTP) додає до опису об'єкта, коли обов'язкових та допоміжних властивостей, отриманих під час сеансу запису, недостатньо для однозначної ідентифікації об'єкта. Замість невдачі інструмент повертається до лічильника, який фактично каже: «візьміть третій об'єкт цього класу».

За замовчуванням для кожного класу тестового об'єкта існує тип порядкового ідентифікатора. WebEdit нумерується інакше, ніж WinButton, а Browser також нумерується інакше. Ви можете переглянути або змінити порядковий ідентифікатор за замовчуванням для класу у вікні ідентифікації об'єкта.

Налаштування порядкового ідентифікатора в QTP/UFT Вікно ідентифікації об'єкта

Як показано на знімку екрана вище, розкривний список «Порядковий ідентифікатор» розташований внизу діалогового вікна «Ідентифікація об’єкта», під списками обов’язкових та допоміжних властивостей. Таке розташування не випадкове: воно відображає порядок, у якому UFT фактично консультується з трьома групами.

Існує три типи порядкових ідентифікаторів у UFT:

  1. На основі індексу
  2. На основі розташування
  3. Час створення

Чому UFT Використовує порядкові ідентифікатори лише як крайній засіб

Ідентифікація об'єкта в UFT працює каскадно. Обов'язкові властивості вивчаються спочатку. Якщо вони не дають жодного збігу, допоміжні властивості додаються одна за одною, доки опис не стане унікальним. Тільки після вичерпання обох груп UFT додайте порядковий ідентифікатор, і під час виконання звертайтеся до механізму Smart Identification, перш ніж порядкове значення буде визнано довіреним.

Причиною такого ранжування є стабільність. Обов'язкові та допоміжні властивості описують що Об'єкт – це: його ім'я, його HTML-тег, його тип, його мітка. Порядковий ідентифікатор описує лише де об'єкт випадково знаходився там у момент запису. Будь-яка зміна сторінки змінює номер:

  • Розробник вставляє приховане поле над тим, яке ви автоматизуєте.
  • Рекламний банер додає два додаткові посилання до заголовка.
  • Адаптивний макет перекомпоновує форму з двох колонок в одну.
  • Спливаюче вікно браузера відкривається раніше, ніж під час записаного запуску.

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

💡 Порада: Перш ніж прийняти порядковий ідентифікатор, відкрийте об'єкт у Object Spy та знайдіть стабільний користувацький атрибут. Додавання цього атрибута до списку допоміжних властивостей класу часто усуває необхідність використання порядкового номера для кожного майбутнього об'єкта цього типу.

Типи порядкових ідентифікаторів у UFT/QTP

На основі індексу

  • Коли використовується порядковий ідентифікатор на основі індексу, UFT присвоює значення індекс властивість об'єкта під час запису.
  • Значення базується на порядку, в якому об'єкт відображається у вихідному коді, а не на екрані.
  • Перше входження має значення 0.
  • Значення властивостей індексу залежать від об'єкта, тому кожен клас тестового об'єкта враховується окремо.
  • Отже, якщо ви використовуєте index:=3 для опису тестового об'єкта WebEdit, UFT шукає четвертий об'єкт WebEdit на сторінці.
  • Аналогічно, якщо ви використовуєте index:=1 для опису тестового об'єкта WebButton, UFT шукає другий об'єкт WebButton на сторінці.

На основі розташування

  • Коли використовується порядковий ідентифікатор на основі місцезнаходження, UFT присвоює значення розташування властивість об'єкта однозначно ідентифікувати його.
  • Значення базується на порядку, у якому об’єкт з’являється у вікні, рамці чи діалоговому вікні відносно інших об’єктів з ідентичними властивостями.
  • Перше входження об’єкта – 0.
  • Значення призначаються стовпцями, зверху вниз, а потім зліва направо.
  • Розташування є порядковим ідентифікатором за замовчуванням для більшості стандартних Windows класи тестових об'єктів, де візуальне розташування стабільніше, ніж порядок розмітки.

Час створення

  • Коли використовується порядковий ідентифікатор часу створення, UFT присвоює значення час створення властивість об'єкта браузера.
  • Цей ідентифікатор доступний лише для веб-середовища та лише для тестових об'єктів браузера.
  • Значення вказує на порядок, у якому браузер відкривався відносно інших відкритих браузерів.
  • Перший браузер, відкритий під час виконання, отримує значення creationtime:=0, а наступні браузери отримують значення 1, 2, 3 тощо.
  • Якщо браузер закрито, решта браузерів зберігають свої початкові значення, а не перенумеровуються.

Індекс проти розташування проти часу створення: порівняльна таблиця

Три ідентифікатори відповідають на три різні запитання, і вибір неправильного є частою причиною періодичних збоїв.

Аспект індекс Місце проведення Час створення
Назва власності індекс розташування час створення
Основа замовлення Порядок у вихідному коді / ієрархії об'єктів Положення екрана всередині вікна, рамки або діалогового вікна Порядок відкриття екземплярів браузера
Правило підрахунку Послідовний, для кожного класу тестового об'єкта Колонки, зверху вниз, потім зліва направо Послідовно, для кожного екземпляра браузера
Перше значення 0 0 0
Відноситься до Веб та Windows класів Переважно стандартний Windows класів Тільки об'єкти браузера
Перерви, коли Зміни порядку розмітки Макет переміщено або змінено його розмір Windows відкривати в іншій послідовності
Найкраще використовувати для Повторювані елементи керування сіткою або таблицею Застарілі форми для робочого столу з фіксованим макетом Веб-процеси з кількома вікнами, такі як спливаючі вікна платежів

Як встановити порядковий ідентифікатор у репозиторії об'єктів

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

  1. відкритий UFT і виберіть Інструменти > Ідентифікація об'єктів.
  2. Виберіть середовище, наприклад, Веб або Стандартне Windows, з розкривного списку «Середовище».
  3. Виберіть клас тестового об'єкта, який потрібно змінити, наприклад WebEdit або WinButton.
  4. Перейдіть на вкладку Порядковий ідентифікатор У розділі виберіть Індекс, Розташування, Час створення або Немає.
  5. Натисніть OK та повторно вивчити об'єкт, щоб нове порядкове значення було захоплено.
  6. Відкрийте сховище об'єктів, виберіть об'єкт і переконайтеся, що порядкова властивість тепер відображається у списку описів.

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

⚠️ Попередження: Зміна порядкового ідентифікатора класу є налаштуванням на рівні машини, а не на рівні тестування. Якщо його не експортувати та не поширювати, скрипти, які передаються на вашій машині, можуть завершитися невдачею на машині колеги або на агенті збірки.

Як використовувати порядкові ідентифікатори в DescriptПрограмування

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

' Ordinals are zero based: index:=3 is the FOURTH WebEdit on the page
Set objPage = Browser("Guru99 Bank").Page("Guru99 Bank")

objPage.WebEdit("index:=3").Set "9999999999"
Print "Filled WebEdit occurrence #" & (3 + 1)

' Location is counted top to bottom, then left to right
objPage.WebButton("location:=1").Click
Print "Clicked WebButton occurrence #" & (1 + 1)

' CreationTime works only on Browser objects
Print "Switching to browser opened at position #" & (1 + 1)
Browser("creationtime:=1").Sync

вихід:

Filled WebEdit occurrence #4
Clicked WebButton occurrence #2
Switching to browser opened at position #2

Безпечніша схема полягає в поєднанні реальних властивостей з ChildObjects тому порядковий номер перевіряється перед його використанням. У наведеному нижче прикладі припускається, що сторінка містить п'ять відповідних об'єктів WebEdit та індекс 9.

Dim oDesc, oChildren, intIndex

Set oDesc = Description.Create()
oDesc("micclass").Value = "WebEdit"
oDesc("html tag").Value = "INPUT"

Set oChildren = objPage.ChildObjects(oDesc)
intIndex = 9

If intIndex < oChildren.Count Then
    oChildren(intIndex).Set "Guru99"
Else
    Print "Index " & intIndex & " is out of range; only " & oChildren.Count & " objects match"
End If

вихід:

Index 9 is out of range; only 5 objects match

Цей захист перетворює некорисну помилку виконання «Не вдається ідентифікувати об’єкт» на читабельне повідомлення, що має значення, коли результати публікуються для дефекту. tracкер або до HP ALM інтегрована з UFT.

Типові помилки під час використання порядкових ідентифікаторів

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

  • Рахуючи від 1. Кожен порядковий ідентифікатор починається з 0. Запис index:=1 для першого поля є найпоширенішою помилкою та призводить до помилки "off-by-one", яка виглядає як проблема з синхронізацією.
  • Плутанина з індексом та місцем розташування. Індекс слідує за вихідним кодом; розташування слідує за екраном. На сторінці, де CSS перевпорядковує елементи, два значення відрізняються та міняються місцями.ping вони мовчки націлюються на неправильний контроль.
  • Використання CreationTime поза веб-середовищем. Ця властивість існує лише для об'єктів Browser. Застосування її до об'єкта Page, Frame або Window призводить до помилки unsupported-property.
  • Жорстке кодування порядкового числа у спільну функцію. Функція повторного використання, яка припускає index:=2, стає непридатною для використання в момент її виклику на іншому екрані з іншим макетом.
  • Залишення порядкових чисел у репозиторії після стабілізації програми. Після того, як розробники додадуть стабільні ідентифікатори, перегляньте об'єкти та замініть порядковий номер новою властивістю.
  • Спираючись на порядкові числа всередині циклів над сітками. Віддавайте перевагу ChildObjects, яка повертає активну колекцію, тому лічильник відображає поточну сторінку, а не записану.

Ресурси

Завантажте веб-сторінки, використані у вищенаведеному посібнику, для самостійної практики

Порядкові ідентифікатори – це лише невелика частина моделі ідентифікації об'єктів. Щоб побачити, як вони вписуються в ширший робочий процес, продовжте читання повного QTP/UFT навчальна серія, перегляньте основи в тестування програмного забезпечення, дізнайтеся, як управляються результати в Підручник з HP ALM, та порівняйте стратегії локатора з Selenium підручник.

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

Значення за замовчуванням залежить від класу. Більшість об'єктів веб-тестування, таких як WebEdit та WebButton, за замовчуванням мають значення Index, об'єкти Browser за замовчуванням мають значення CreationTime, а Standard Windows Класи за замовчуванням використовують Розташування. Кожне значення за замовчуванням видно та можна редагувати у вікні Ідентифікація об'єкта.

Спочатку запускається інтелектуальна ідентифікація. UFT спробує вивчений опис, потім Smart Identification, якщо вона ввімкнена для класу, і повертається до порядкового ідентифікатора лише тоді, коли обидва не можуть створити жодного відповідного об'єкта.

Так. У вікні «Ідентифікація об’єкта» для класу встановіть для розкривного списку «Порядковий ідентифікатор» значення «Немає». UFT потім повідомляє про помилку ідентифікації замість вгадування, що безпечніше для наборів, де клацання неправильного об'єкта може пошкодити тестові дані.

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

Так. Ідентифікація на основі штучного інтелекту в поточній UFT Один випуск відповідає елементам керування за візуальним виглядом та текстом підпису, а не за позицією розмітки, тому поле можна знайти за його зовнішнім виглядом, навіть якщо значення навколишніх індексів зміщуються.

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

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

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