11.9. Ассоциации объектов (object mapping)

Назад: 11.8 Перехват событий Содержание Дальше: 11.10 Использование Визуализатора

В некоторых приложениях по разным причинам разработчики используют собственноручно написанные элементы управления, которые, однако, по функциональности аналогичным стандартным контролам. Обычно это используется для расширения возможностей этого элемента управления и новый элемент делается на базе существующего, однако TestComplete не может распознать его и считает просто объектом, с которым может работать только кликая мышкой и вводя текст при помощи метода Keys.
Чтобы решить подобные проблемы, в TestComplete существует возможность «связать» неизвестный TestComplete-у элемент управления с уже известным. Эта возможность называется Object Mapping (Ассоциации объектов). Для этого необходимо в настройках проекта в разделе Object Mapping выбрать существующий класс и добавить в список имен классов новое имя класса вашего элемента управления.
В качестве примера рассмотрим приложение Web Platform Installer. Внешне оно выглядит так:
 
В левой нижней части окна вы видите ссылку Options, которая на самом деле является статическим текстом с определенными свойствами, однако работает фактически как кнопка, так как при нажатии на нее открывается новое окно. Если в TestComplete начать записывать действия, нажать на эту ссылку и остановить затем запись, то мы получим следующий записанный скрипт:

function Test1()
{
  Sys.Process(“WebPlatformInstaller”).WinFormsObject(“ShellForm”).WinFormsObject(“_changeSettingsLinkLabel”).Click(36, 5);
}

Так как TestComplete не знает, что это за объект, он записывает нажатие на ссылку с помощью метода Click с конкретными координатами.
Теперь в TestComplete щелкнем правой кнопкой по имени проекта и выберем пункт меню Edit – Properties, затем выберем в списке раздел Object Mapping, а в списке классов – элемент Win32 Controls and Windows – Button.
 
Теперь, если вы знаете имя нового класса (например, предварительно скопировали значение свойства WndClass в Object Browser-е), можете нажать кнопку Add Class Name и в добавленном элементе списка вписать имя своего класса. Или же можете просто нажать на кнопку Add From Screen и затем выделить на экране нужный объект с помощью Finder Tool. В некоторых случаях (как в нашем примере) имя класса строится динамически (например, WindowsForms10.STATIC.app.0.33c0d9d), поэтому лучше динамические части заменить на символ групповой замены *, чтобы в итоге получилось WindowsForms*STATIC*.
 
Если теперь снова перейти в режим записи и нажать на ту же ссылку Options, мы получим следующий результат:

function Test2()
{
  Sys.Process(“WebPlatformInstaller”).WinFormsObject(“ShellForm”).WinFormsObject(“_changeSettingsLinkLabel”).ClickButton();
}

Как видите, метод Click с координатами заменился на ClickButton без координат, так как теперь TestComplete считает, что работает с обычной кнопкой.
Сразу оговоримся, что приведенный выше пример не совсем удачный с точки зрения маппирования, так как фактически мы заставляем TestComplete работать со статическим текстом как с кнопкой, однако он хорошо показывает основы работы с Object Mapping.
Разработчики TestComplete уже предусмотрели ассоциации со множеством известных классов, в чем можно убедиться, просмотрев настройки разных существующих классов, поэтому подобные ситуации у пользователей должны возникать нечасто.

Назад: 11.8 Перехват событий Содержание Дальше: 11.10 Использование Визуализатора