Пример расширения Excel. Класс TechnologyManager
Этот класс расширяет класс UITechnologyManager и отвечает за предоставление основных служб для расширения Microsoft Excel. Базовый класс содержит множество методов, однако в данном примере используется только их подмножество.
Некоторые методы лишь возвращают значение свойства. Многие методы используются разработчиками для переопределения алгоритмов по умолчанию, встроенных в обработчик закодированных тестов пользовательского интерфейса. Эти методы выдают исключение NotSupportedException или возвращают значение null, в результате чего средой используется алгоритм по умолчанию.
В зависимости от сложности базовой технологии, разработка кода диспетчера технологий может занимать от нескольких недель до нескольких месяцев. Excel предоставляет возможность создания диспетчера технологий, потенциально обладающего очень широкими функциональными возможностями. Настоящий пример намеренно ограничен листами и ячейками Excel, и в нем используется лишь часть возможностей форматирования.
В коде диспетчера технологий по возможности используется канал удаленного взаимодействия .NET, открытый классом Communicator для извлечения данных из надстройки, выполняющейся в процессе Excel.
Видимость COM
Обратите внимание, что данный класс и все классы элементов, расширяющие класс UITechnologyElement, содержат атрибут ComVisibleAttribute со значением true для обеспечения видимости этих классов для модели COM.
Свойство TechnologyName
Это переопределение свойства UITechnologyManager.TechnologyName должно предоставлять уникальное понятное имя, которое определяет базовую технологию для всех других компонентов расширения. Для данного расширения используется значение "Excel".
Метод GetControlSupportLevel
Это переопределение метода UITechnologyManager.GetControlSupportLevel возвращает число, обозначающее уровень поддержки, который диспетчер технологий обеспечивает для элемента управления, представленного указанным дескриптором. Чем выше возвращаемое значение, тем лучше диспетчер технологий поддерживает элемент управления. В данном случае метод проверяет окно, содержащее элемент управления, и если оно является листом Excel, метод возвращает максимально возможное значение; в противном случае возвращается ноль, означающий, что поддержка не обеспечивается.
Методы получения элемента
Среда обработки закодированных тестов пользовательского интерфейса использует несколько важных методов для получения относящегося к технологии элемента путем указания дескриптора, точки на экране или элемента из другой технологии. Код этих методов понятен без объяснений. Базовые методы перечислены ниже.
Метод ParseQueryId
При создании закодированного теста пользовательского интерфейса можно указать значения свойств для некоторых или всех элементов управления в тесте. Эти значения используются средой тестирования для создания пар "имя-значение", которые называются свойствами поиска и используются для поиска определенных элементов управления пользовательского интерфейса в процессе выполнения теста. Совокупность свойств поиска представляет значение свойства UITechnologyElement.QueryId каждого элемента технологии, которое включает каждый элемент управления. Поскольку поиск элемента управления может выполняться несколько раз в течение теста, данный метод предоставляет диспетчеру технологий способ оптимизации синтаксического анализа свойств поиска для данного элемента управления. Данный метод также возвращает файл Cookie, который может использоваться средой для последующих поисков элемента управления. В этой реализации метода используется метод AndCondition.Match для синтаксического анализа свойств поиска.
Метод MatchElement
Для выполнения поиска элементов управления диспетчером технологий можно реализовать метод UITechnologyManager.Search для возвращения массива возможных совпадений или вызова исключения NotSupportedException, которое указывает среде использовать собственный алгоритм поиска. В любом случае необходимо реализовать метод MatchElement, и в этой реализации снова используется метод AndCondition.Match.
Методы навигации
Эти методы получают родительские, дочерние или одноуровневые элементы для указанного элемента из иерархии пользовательского интерфейса. Код является несложным и содержит понятные комментарии.
Внутренний метод GetExcelElement
Данный внутренний метод принимает дескриптор окна и сведения об элементе Excel и возвращает запрошенный элемент Excel.