Testcomplete - робота над помилками

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

Почнемо з більш загального питання.

Як вирішувати проблему?

Припустимо, після запуску тесту ви отримали лог з декількома помилками:

Testcomplete - робота над помилками

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

Тепер приступимо власне до вирішення проблеми:

  1. Якщо повідомлення про помилку ні про що вам не говорить, клацніть на ньому один раз мишею і подивіться на панель Remarks (в TestComplete 8 і пізніших вона називається Additional Info). Зазвичай там знаходиться більш детальна інформація про проблему.
  2. Якщо при створенні помилки був згенерований скріншот - подивіться на нього теж (панель Picture).
  3. Якщо до цих пір причина неясна - двічі клацніть на помилку в балці, в результаті ви перейдете до рядка коду, в якій виникла проблема. Подивіться уважно на код і спробуйте зрозуміти, що саме в цьому коді могло привести до подібної помилку (звернення до неіснуючого вікна, спроба використання неоголошеної змінної, вихід за кордон масиву і т.п.).
  4. Якщо причина досі незрозуміла - пора налагоджувати. Ставте брекпоінт на рядку, де виникла помилка (для цього потрібно натиснути F9. Попередньо поставивши в цей рядок курсор) і запускайте тест. Виконання тесту буде зупинено і ми отримаємо можливість уважно вивчити стан всіх об'єктів в даний момент:
  • перевірте, що всі змінні ініціалізовані і містять правильні значення (особливу увагу приділяйте значенням типу null і undefined. так як часто з ними пов'язані проблеми роботи зі змінними)
  • перевірте, що всі вікна і елементи управління, які використовуються в цьому рядку, існують і видно на екрані - властивості Enabled. Exists. Focused. Visible. VisibleOnScreen (прочитайте в довідковій системі про різницю між властивостями Visible і VisibleOnScreen. Якщо ще цього не знаєте)
  • перевірте, що викликається метод підтримується об'єктом (aqObject.IsSupported)
  1. Якщо на цьому етапі вам неясно, чому змінні мають такі значення, а не очікувані, зупиняйте відтворення і ставте брекпоінт раніше, після чого виконуйте скрипт крок за кроком (виконати один рядок коду можна за допомогою клавіші F10. А зайти всередину функції - за допомогою клавіші F11).

Які бувають помилки?

Тепер розглянемо приклади помилок і способи їх вирішення.

The test run has stopped because the Stop on Error (Warning) setting is enabled

Ця помилка з'являється в тому випадку, якщо перед цим виникла інша помилка і в настройках проекту зазначено зупиняти виконання тестів в разі виникнення помилки. Вирішити її досить просто:

  1. Відкрийте властивості проекту (правий клацання на імені проекту, Edit - Properties).
  2. Відкрийте групу опцій Playback.
  3. Вимкніть прапорці Stop on error / Stop on warning

Incomplete Keyboard Input

  1. Ця помилка зазвичай з'являється в тому випадку, якщо в метод Keys була передана неправильна послідовність символів. Для методу Keys символи!. ^.

Ця помилка з'являється в тому випадку, якщо під час роботи з тестовим додатком на екрані з'явилося модальне вікно, що заважає TestComplete'у. Є 2 способи вирішити цю проблему:

  • автоматично: в настройках проекту в групі опцій Playback вказати TestComplete'у, як чинити з такими вікнами (закривати, натискати на фокусований елемент управління і т.п.)
  • вручну: створити обробник події OnUnexpectedWindow. де явно прописати необхідні дії.

Другий спосіб зазвичай використовується в специфічних випадках з нестандартними вікнами.

Є схожа проблема з Overlapping Windows (перекривають вікнами). Різниця між ними в тому, що Overlapping Window не заважає роботі TestComplete. Їх можна ігнорувати (все в тих же налаштуваннях проекту) або обробляти за допомогою події OnUnexpectedWindow.

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

  • неправильна ідентифікація об'єкта (заданий набір властивостей і їх значень не збігається з реальним об'єктом)
  • змінилося становище об'єкта в ієрархії об'єктів (частіше буває при використанні моделі об'єктів Tree)
  • не найден один з батьківських об'єктів (або ж під опис батьківського об'єкта потрапляє відразу кілька об'єктів)

Рішення проблеми: за допомогою Object Spy (в TestComplete 7 - Object Properties) з'ясувати повне ім'я та нові значення властивостей і оновити скрипти або NameMapping.

Unable to Find the Object

Перш ніж виконувати якісь дії з будь-яким об'єктом (вікно, процес, елемент управління), TestComplete спочатку перевіряє його існування. Якщо об'єкт не існує, в балці з'являється помилка «Unable to Find the Object». Найчастіше це відбувається в тому випадку, якщо об'єкт був привласнений змінної, після чого сам об'єкт перестав існувати, а скрипт намагається працювати зі змінною (яка відповідає вже неіснуючого об'єкту).

Рішення проблеми: заново форматувати змінну тим же об'єктом.

Can not Obtain the Window.

Спроба звернення до вікна або елементу управління, якого не існує. Найбільш часта причина: неправильне написання заголовка, класу або невірний індекс елемента.

Рішення проблеми: виправити неправильне властивість. Це може бути наслідком змін в тестованому додатку.

Ambiguous Recognition of the Tested Object

Неоднозначне визначення вікна: опису вікна або елемента управління відповідає кілька об'єктів. Основних причин може бути дві:

  • невірно обраний набір властивостей, які використовуються для ідентифікації об'єкта (наприклад, їх дуже мало)
  • невірне використання символів групової заміни (wildcards, * і?).

Рішення проблеми: визначити новий набір властивостей для унікальної ідентифікації об'єктів або використовувати менш універсальні заміни за допомогою символів * і.

The alias refers to a mapped object that is not in the NameMapping project item

Alias ​​посилається на неіснуючий елемент NameMapping. Це може відбуватися в тому випадку, якщо елемент був видалений з NameMapping. але відповідний йому Alias ​​залишився.

Рішення проблеми: видалити Alias ​​і переписати скрипти відповідно до змін.

висновок

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

Також слід згадати, що в деяких випадках рішення проблеми може виявитися складнішим, ніж в описаних тут випадках. Наприклад, якщо для створення тестів ви використовуєте об'єктно-орієнтований підхід з використанням мовних можливостей JScript або VBScript. знайти причину може виявитися набагато складніше, тому що TestComplete не підтримує переходи всередину методів при натисканні в балці.

Ще більш проблематичним може виявитися робота з такими об'єктами, які неможливо «зловити» за допомогою Object Spy (наприклад, меню). В цьому випадку доведеться писати додатково невеликі функції, які будуть в лог виводити список доступних властивостей і методів (за допомогою методів aqObject.GetProperties і aqObject.GetMethods).

Більш докладно познайомитися з TestComplete можна на найближчому тренінгу. де ми в тому числі будемо розглядати обробку подій і різні параметри TestComplete.

Детальніше почитати про всі розглянутих помилках можна в офіційному керівництві по TestComplete (англійською мовою).

Схожі статті