Что пишут в блогах

Подписаться

Онлайн-тренинги

Что пишут в блогах (EN)

Разделы портала

Про инструменты

.
TestComplete – работа над ошибками
05.09.2013 10:20

Автор: Геннадий Алпаев (автор единственного русскоязычного учебника по 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)

Для просмотра значений переменных у нас есть сразу несколько способов: панели Watch List и Locals, а также окошко Evaluate (вызывается нажатием на кнопку с изображением калькулятора на панели инструментов), в котором можно присвоить переменным новые значения в случае надобности.

  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 символы !, ^, ~ и [ имеют специальные значения (эмуляция нажатия клавиш-модификаторов типа Ctrl и Shift), поэтому чтобы ввести такой символ, его нужно просто продублировать. Самый простой способ создать правильную последовательность вводимого текста — записать его с помощью Record Script.
  2. Еще одна возможная причина ошибки — отсутствие нужной раскладки клавиатуры (если используется не английский текст) или нужных компонентов ОС (в случае с азиатским текстом).
  3. Кроме того, в Windows XP и Server 2003 может быть выключена опция Extend support of advanced text services to all programs.

Unexpected window

Эта ошибка появляется в том случае, если во время работы с тестовым приложением на экране появилось модальное окно, мешающее TestComplete'у. Есть 2 способа решить эту проблему:

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

Второй способ обычно используется в специфических случаях с нестандартными окнами.

Есть похожая проблема с Overlapping Windows (перекрывающими окнами). Разница между ними в том, что Overlapping Window не мешает работе TestComplete. Их можно игнорировать (все в тех же настройках проекта) или обрабатывать с помощью события OnUnexpectedWindow.

Object Does Not Exist

Объект, с которым скрипт пытается работать, не существует. Вот список наиболее частых причин этой ошибки:

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

Решение проблемы: с помощью Object Spy (в TestComplete 7 – Object Properties) выяснить полное имя и новые значения свойств и обновить скрипты или NameMapping.

Unable to Find the Object

Прежде чем выполнять какие-то действия с любым объектом (окно, процесс, элемент управления), TestComplete сначала проверяет его существование. Если объект не существует, в логе появляется ошибка «Unable to Find the Object». Чаще всего это происходит в том случае, если объект был присвоен переменной, после чего сам объект перестал существовать, а скрипт пытается работать с переменной (которая соответствует уже несуществующему объекту).

Решение проблемы: заново инициализировать переменную тем же объектом.

Cannot 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 (на английском языке).

Обсудить в форуме