TestComplete – работа над ошибками |
05.09.2013 10:20 |
Автор: Геннадий Алпаев (автор единственного русскоязычного учебника по TestComplete и ведущий тренинга Автоматизация тестов с использованием TestComplete) Во время работы скриптов время от времени неизбежно возникают ошибки и новичку поначалу бывает трудно разобраться, отчего возникла ошибка и как ее исправить. В этой статье я расскажу об общем подходе к решению таких проблем в TestComplete и расскажу о наиболее часто встречающихся ошибках, которые могут вызвать вопросы. Начнем с более общего вопроса. Как решать проблему?Предположим, после запуска теста вы получили лог с несколькими ошибками: Здесь мы видим три проблемы, которые могут быть связаны, а могут и не быть. Поэтому начинать необходимо всегда с решения первой проблемы, так как ее исправление может автоматически исправить и все остальные. С другой стороны, попытка исправить более поздние ошибки скорее всего ни к чему не приведет, так что мы зря потратим время. Теперь приступим собственно к решению проблемы:
Для просмотра значений переменных у нас есть сразу несколько способов: панели Watch List и Locals, а также окошко Evaluate (вызывается нажатием на кнопку с изображением калькулятора на панели инструментов), в котором можно присвоить переменным новые значения в случае надобности.
Какие бывают ошибки?Теперь рассмотрим примеры ошибок и способы их решения. The test run has stopped because the Stop on Error (Warning) setting is enabled Эта ошибка появляется в том случае, если перед этим возникла другая ошибка и в настройках проекта указано останавливать выполнение тестов в случае возникновения ошибки. Решить ее довольно просто:
Incomplete Keyboard Input
Unexpected window Эта ошибка появляется в том случае, если во время работы с тестовым приложением на экране появилось модальное окно, мешающее TestComplete'у. Есть 2 способа решить эту проблему:
Второй способ обычно используется в специфических случаях с нестандартными окнами. Есть похожая проблема с Overlapping Windows (перекрывающими окнами). Разница между ними в том, что Overlapping Window не мешает работе TestComplete. Их можно игнорировать (все в тех же настройках проекта) или обрабатывать с помощью события OnUnexpectedWindow. Object Does Not Exist Объект, с которым скрипт пытается работать, не существует. Вот список наиболее частых причин этой ошибки:
Решение проблемы: с помощью 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 Неоднозначное определение окна: описанию окна или элемента управления соответствует несколько объектов. Основных причин может быть две:
Решение проблемы: определить новый набор свойств для уникальной идентификации объектов или использовать менее универсальные замены с помощью символов * и ?. 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 (на английском языке). |