FAQ – Часто задаваемые вопросы

Хотите добавить сюда свой вопрос? Пришлите его мне по почте (genka@alpaev.com)и мы посмотрим, что можно сделать!

 

В.: Я пытаюсь проверить, существует ли объект, с помощью свойства Exists, однако в лог мне пишется ошибка «Cannot obtain the window…». Почему?

О.: В TestComplete для того, чтобы проверить, существует ли объект, необходимо воспользоваться методами Wait, которые для каждого класса называются по-своему (например, WaitWindow для класса Window, WaitWinFormsObject для класса WinFormsObject и т.д.). Учтите, что методы Wait возвращают объект, а не логическое значение. Подробнее об использовании методов Wait можно прочитать в главе 3.5 Синхронизация выполнения скриптов.

 

В.: Во время тестирования мне нужно поставить задержку, однако каждый раз при выполнении задержка может быть разной. Как быть, чтобы каждый раз не использовать очень длинную (максимальную) задержку?

О.: В подобных случаях необходимо привязываться к каким-либо свойствам приложения, которые позволят точно сказать, закончилась ли операция. Например, ждать пока существует окно, или пока элемент управления не станет активным, или пока не появится определенное сообщение и т.п. В каждом конкретном случае это разные события и зависят исключительно от тестируемого приложения. Для отслеживания подобных событий используются методы Wait, о которых можно прочитать в главе 3.5 Синхронизация выполнения скриптов. И только в самых крайних случаях можно пользоваться функцией aqUtils.Delay(), которая вставляет задержку на определенное время независимо ни от чего.

 

В.: Во время работы скриптов TestComplete выводит ошибку «Объект не найден», однако я вижу этот объект в Object Browser. Почему TestComplete его не видит?

О.: Иногда в результате работы скриптов приложение обновляется (целиком или какая-то его часть). В результате скрипты пытаются работать с устаревшими объектами, которые уже не существую, хотя называются они точно так же. Обычно это происходит при использовании переменных, например:

var wCalc = Sys.Process(“calc”).Window(“SciCalc”);

// какие-то действия, в результате которых объект Window(“SciCalc”) обновляется

wCalc.Window(“Button”, “1”).Click(); // <– ОШИБКА! wCalc уже не существует!

Чтобы решить эту проблему, необходимо либо заново проинициализировать переменную, либо обновить дерево объектов с помощью метода Refresh(). Метод Refresh() определен для любого объекта. Например, все следующие примеры корректны:

Sys.Refresh();

Sys.Process(“calc”).Refresh();

Sys.Process(“calc”).Window(“SciCalc”).Refresh();

Sys.Process(“calc”).Window(“SciCalc”).Window(“Button”, “1”).Refresh();

 

В.: Я поставил в скрипте breakpoint, однако TestComplete не останавливает выполнение скриптов в этом месте. Почему?

О.: Убедитесь, что:

  1. Установлен MS Script Debugger (для TestComplete версии 8 или более ранних)
  2. Включена опция Debug – Enable Debugging в TestComplete
  3. Используется самая последняя версия TestComplete (в некоторых версиях наблюдалась эта проблема, но была быстро устранена в следующих версиях)
  4. Текущий пользователь системы имеет права Администратора или Отладчика
  5. TestComplete не запущен в «тихом» режиме (Silent Mode, см. главу 11.2 Запуск TestComplete из командной строки)
  6. В параметрах интернета включена опция отладки (Start – Control Panel – Internet Options – Advanced, галочки Disable script debugging… в разделе Browsing)

  7. Если ничего выше не помогло — перезапустите TestComplete и/или компьютер

В.: TestComplete работает медленно (во время записи или воспроизведения). Что можно сделать?

О.: Есть несколько причин (кроме очевидной: слабый компьютер), которые могут влиять на скорость работы TestComplete во время записи/воспроизведения. Вот несколько советов, которые могут вам помочь:

  1. Отключите Visualizer. Если он включен, то во время записи/воспроизведения создаются скриншоты объектов, что, естественно, замедляет работу
  2. Отключите неиспользуемые Extension-ы (меню File – Install Extensions). Например, если вы не тестируете .NET приложения, то и плагин “.NET Open Applications Support” вам ни к чему
  3. Используйте фильтр процессов в Object Browser-e. Начиная с версии 6, TestComplete позволяет отображать в Object Browser-e не все процессы, а только выбранные. Рекомендуется включить отображение только тех процессов, с которыми работают ваши скрипты. Это ускорит обновление дерева объектов в Object Browser-e
  4. Если вы уверены, что причина медленной работы в тестируемом приложении – попробуйте поменять Object Tree Model и/или Web Tree Model
  5. В некоторых случаях стандартные методы TestComplete работают медленно (яркий пример – метод Keys в Internet Explorer 7 и выше). Попробуйте другие методы работы с такими элементами управления (например, присваивайте значения текстовым полям напрямую через свойство value вместо использования метода Keys)
  6. Убедитесь, что задержки при выполнении определенных операций (ввод текста, движение мыши и т.д.) выставлены на минимум (правый щелчок на имени проекта, Edit – Properties – Playback, группа опций “Delay…”)
  7. Также убедитесь, что методы Wait и Delay используются разумно во всем проекте, так как их частое использование может приводить к существенным задержкам при воспроизведении скриптов
  8. Отключите Debug Agent, если он вам не нужен

Более полный список улучшений можно прочитать в статье Automated Test Performance Tips (на английском языке).

В.: Как в TestComplete запустить программу (или досовскую команду)?

О.: Для запуска любой программы в TestComplete есть как минимум 3 способа. Предположим, мы работаем с программой notepad.exe, которая находится в папке C:\WINDOWS. Вот эти способы:

  1. Добавить программу в TestedApps и запустить с помощью команды
    TestedApps.notepad.Run();
    Обратите внимание, что добавить приложение в TestedApps можно также динамически с помощью метода TestedApps.Add()
  2. Использовать WScript.Shell
    Sys.OleObject(“WScript.Shell”).Run(“C:\\Windows\\notepad.exe”, SW_SHOWNORMAL);
  3. Использовать WinAPI
    Win32API.WinExec(“C:\\Windows\\notepad.exe”, SW_SHOWNORMAL);

Для выполнения команды DOS необходимо в качестве вызываемой программы указать CMD.EXE, затем передать ей параметр “/c” и необходимую команду. Например, следующая команда удаляет все файлы из папки Windows:

Sys.OleObject(“WScript.Shell”).Run(“cmd.exe /c del /q /s C:\\WINDOWS”, 0);

В.: У меня проблема с запуском/лицензией. Что делать?

О.: Начиная с версии 8 в TestComplete полностью изменилась система лицензий. Чтобы помочь пользователям разбираться с проблемами, SmartBear предоставляет следующие варианты:

 

  • Список наиболее часто возникающих проблем и их причин (http://support.smartbear.com/viewarticle/63459/)
  • Онлайн-Troubleshooter (http://support.smartbear.com/about-troubleshooter/). Troubleshooter с помощью вопросов и вариантов ответов позволяет подготовить всю необходимую информацию, которую затем вы передаете в службу поддержки, а они уже помогают вам решить проблему. Этот вариант рекомендуется использовать перед обращением в службу поддержки, если вы самостоятельно не можете решить проблему.