Кодированный тест пользовательского интерфейса: настройка свойств поиска при записи в Internet Explorer

Автор этого блога полагает, что читатели разбираются в свойствах поиска кодированного теста пользовательского интерфейса (Coded UI Test). Если же подобные знания отсутствуют, то лучше всего начать изучение вопроса с этого материала. В настоящем блоге описана новая функция поддержки «настраиваемых свойств» Coded UI Test, появившаяся в Visual Studio с пакетом обновления 1.

Перед выпуском пакета обновления 1 Visual Studio инструмент Coded UI Test производил запись элементов управления со свойствами поиска и фильтров, а возможность настройки этих параметров отсутствовала. Например, запись щелчка мышью по кнопке всегда приводила к созданию кнопки с идентичным списком свойств. Инструмент Coded UI Test использует свойства поля поиска и фильтров при поиске элемента управления, действие над которым нужно выполнить при воспроизведении. Однако пользователю иногда нужно настраивать список свойств, записываемых данным инструментом, поскольку он больше знает об этих элементах управления. К примеру, если имеется кнопка с постоянно изменяющейся надписью, нет смысла сохранять свойство DisplayText и использовать его для поиска данной кнопки. Очевидно, что результаты поиска окажутся недостоверными.

После данного обновления у пользователя появилась возможность настраивать список свойств, записываемых с учетом типа элемента управления. Пользователь может выполнять эту операцию для всех элементов управления, упомянутых в конфигурации.  При изменении конфигурации свойств кнопки все последующие сеансы записи любого кнопочного элемента управления будут содержать запись свойств, указанных в новой конфигурации.

Обновление позволит настраивать свойства поиска и фильтров для элементов управления на языке HTML при их записи в браузере Internet Explorer.

Поддерживаемые версии:

  1. Элементы управления HTML5 требуют наличия IE9 и выше, а такие элементы управления HTML5, как индикаторы выполнения и ползунки — наличия IE10.
  2. После обновления эта возможность появится у всех SKU с инструментом Coded UI Test и функцией записи посредством Internet Explorer:

                а. VS Ultimate
                б. VS Premium
                в. VS TestProfessional
                г. VSTF TestAgent
                д. VSTF TestController

Установка и пользовательский интерфейс

  • Для обновления Visual Studio следует установить два файла: файл XML (IEPropertyConfiguration.xml) и файл XSD (IEPropertyConfiguration.xsd), который проверяет корректность файла XML. Оба этих файла будут записаны в папку C:\Program Files\Common Files\Microsoft Shared\VSTT\11.0\ (компьютер на базе процессора x86) или в папку C:\Program Files (x86)\Common Files\Microsoft Shared\VSTT\11.0\ (компьютер на базе процессора x64).

  • Файл XML –– это редактируемый файл конфигурации, в котором пользователь может изменять свойства поиска. После внесения любых изменений пользователь обязан проверить корректность файла XML с помощью файла XSD.

  • Файл конфигурации организован в виде перечня типов элементов управления, каждому из которых присвоен список свойств поиска и свойств фильтров. Пользователь может отредактировать свойства поиска и свойства фильтров для любого типа элементов управления: переставить их или удалить. Настраиваемые свойства не поддерживаются. Когда пользователь изменяет свойства, относящиеся к типу элемента управления, последующие записи об этом элементе управления получают обновленный список свойств. Например:    

     <ControlType Name="Button">
     <SearchProperties>
     <Property Name="Id"/>
     <Property Name="Name"/>
     <Property Name="DisplayText"/>
     <Property Name="Type"/>
     </SearchProperties>
     <FilterProperties>
     <Property Name="Src"/>
     <Property Name="Title"/>
     <Property Name="Class"/>
     <Property Name="ControlDefinition"/>
     <Property Name="TagInstance"/>
     </FilterProperties>
    </ControlType>
    
  • Кроме того, файл конфигурации содержит атрибут ApplySmartConfiguration, который принимает значения true или false. Ниже дано более подробное описание того, как этот атрибут влияет на режимы работы. Пример: <ControlTypes ApplySmartConfiguration="true">

 

Примеры использования

После внесения изменений в файл конфигурации не нужно выполнять повторную сборку или перезапускать Visual Studio. Для получения желаемых изменений достаточно перезапустить инструмент Coded UI Test Recorder/Builder. Давайте на примере InputButton рассмотрим, как и почему инструмент Coded UI создает разные записи в различных конфигурациях.

  1. Конфигурация InputButton по умолчанию (см. файл XML в предыдущем разделе): запись свойств будет произведена согласно существующей логике. Выполняется запись всех настроенных свойств.

  2. Конфигурацию InputButton в файле IEPropertyConfiguration.xml можно изменить согласно приведенному ниже образцу. Тогда записанная кнопка будет выглядеть так, как показано на рисунке ниже. Отсюда видно, что запись параметров Display Text и Control Definition не производится, в отличие от предыдущего сеанса записи. (Обратите внимание, что в обоих сценариях не записывается параметр Src. Это свойство предназначено для кнопок типа Image, режимы работы которых описаны ниже):   

      <ControlType Name="InputButton">
     <SearchProperties>
     <Property Name="Id"/>
     <Property Name="Name"/>
     <!-- <Property Name="DisplayText"/> -->
     <Property Name="Type"/>
     </SearchProperties>
     <FilterProperties>
     <Property Name="Src"/>
     <Property Name="Title"/>
     <Property Name="Class"/>
     <!-- <Property Name="ControlDefinition"/> -->
     <Property Name="TagInstance"/>
     </FilterProperties>
     </ControlType>   
    

  3. Теперь поменяем местами свойства поиска и свойства фильтра. На рисунке ниже видно, что запись изменяется соответствующим образом:

      <ControlType Name="InputButton">
     <SearchProperties>
     <Property Name="Id"/>
     <Property Name="Name"/>
     <Property Name="Title"/>
     <Property Name="Type"/>
     </SearchProperties>
     <FilterProperties>
     <Property Name="Src"/>
     <Property Name="DisplayText"/> 
     <Property Name="Class"/>
     <Property Name="ControlDefinition"/> 
     <Property Name="TagInstance"/>
     </FilterProperties>
     </ControlType>  
    

Режимы работы и ограничения

  1. Существуют два ограниченных свойства поиска, которые невозможно добавить к свойствам фильтра, –– это  Id и Name. Даже если добавить их к свойствам фильтра, генерируемый код не претерпит никаких изменений. Эти свойства можно удалить из свойств поиска, однако их нельзя использовать в качестве свойств фильтра. Если настроить Id и Name в качестве свойств фильтра, то в журнале трассировки появится предупреждение о нарушении ограничения.
  2. Настраиваемые свойства не поддерживаются. Пользователям доступно только удаление и добавление свойств, имеющихся в XML-файле конфигурации.
  3. Пользователи могут настраивать только те типы элементов управления, которые присутствуют в файле конфигурации. Добавление нового типа элементов управления вручную не повлияет на создаваемую для этого элемента запись.
  4. Любые ошибки синтаксического разбора или неверные значения в файле конфигурации приведут к тому, что UITest вернется к использованию исходной логики конфигурации свойств для всех типов элементов управления. Неизвестные типы элементов управления и ошибки синтаксического разбора приведут к появлению записей об ошибках в журнале трассировки.
  5. Для каждого типа элементов управления должно быть настроено хотя бы одно свойство поиска. Если этого не сделать, то UITest вернется к использованию исходной логики конфигурации свойств для этого типа элементов управления.
  6. Атрибут ApplySmartConfiguration добавляется к самому верхнему уровню файла конфигурации. По умолчанию данный атрибут имеет значение true. Если этому флагу присвоено значение true, то средство UITest будет использовать интеллектуальную логику в дополнение к пользовательской конфигурации. Если этому флагу присвоено значение false, то средство UITest не будет использовать дополнительную логику. Другими словами, окончательный вид записи будет полностью соответствовать настройкам, указанным в файле XML.

Использование атрибута ApplySmartConfiguration и режимы работы

Автоматическая взаимная замена свойств

 

  1. Перед выпуском данного обновления использовалась следующая логика: если принадлежащие конкретному элементу управления свойства ID и Name имели действительные непустые значения, то инструмент Coded UI Test сохранял ID и Name в качестве свойств поиска и перемещал все прочие свойства в свойства фильтра этого элемента управления. Если ID или Name имели значение NULL, то никакие свойства поиска не перемещались в свойства фильтра. Этот режим работы можно наблюдать на примере текущих сборок; изменение конфигурации свойств не требуется. Итак, при наличии двух кнопок, одна из которых имеет значение ID, а другая лишена этого значения, можно наблюдать запись большего количества свойств поиска для второго элемента управления, в то время как первый элемент управления будет иметь в качестве свойств поиска только ID и Name. На рисунке ниже видно, что остальные свойства –– это свойства фильтра (кроме Name и ID). Если вернуться в раздел выше «Примеры использования» и проверить любую запись, то обнаружится,
     
    что параметр ID имеет пустое значение и средство Coded UI Test не перенесло туда никаких значений.      
  2. ApplySmartConfiguration имеет значение True: применяется указанная выше логика, независимо от пользовательской конфигурации свойств в файле XML.
  3. ApplySmartConfiguration имеет значение False: UITest не станет переупорядочивать свойства и будет придерживаться указанной конфигурации.
  4. Пример. В отличие от предыдущих записей в Usage Section, этот сеанс записи не привел к перестановке свойств, хотя значения параметров ID и Name являются допустимыми. Причина в том, что флаг имеет значение false:   

Условное добавление свойств (на основе флага ApplySmartConfiguration)

  1. Некоторые свойства являются необязательными для отдельных элементов управления. К примеру, кнопка типа Image будет иметь свойство Src, в то время как для обычной кнопки это свойство лишено смысла. Инструмент Coded UI Test проверяет отдельные свойства, перед тем как добавить их к элементу управления. В некоторых случаях проверка зависит от других свойств элемента управления. Если флаг ApplySmartConfiguration имеет значение False, то средство Coded UI Test не будет проводить никаких проверок перед добавлением свойств. Если этот флаг имеет значение True, то перед добавлением свойства используется указанная выше логика. Если проверку не удается завершить успешно, свойство не сохраняется.
  2. Для всех типов элементов управления используются стандартные средства проверки свойств ControlDefinition, Name и TagInstance. Свойство ControlDefinition добавляется только в том случае, если количество детей (потомков) не превышает 5000. Свойство Name будет добавлено ко всем типам элементов управления, кроме элемента управления Body (например, HtmlDocument). Свойство TagInstance будет добавлено только в том случае, если оно является числом (например, его значение больше -1).
  3. Некоторые типы проверок свойств являются специфичными для конкретных типов элементов управления. 
  4. Button/InputButton: свойство Src будет добавлено только к тем кнопкам (элементам управления), которые имеют тип Image (см. рисунок с примером в разделе «Автоматическая взаимная замена свойств»). В данном примере флаг имеет значение false, поэтому добавляется Src, несмотря на то что тип данной кнопки –– не Image.
  5. HyperLink: свойство InnerText добавляется только для узлов типа Link. Гиперссылки с областью перехода по щелчку не содержат свойство InnerText.
  6. Image: свойства Href и LinkAbsolutePath добавляются только в том случае, если узел изображения расположен прямо под узлом Anchor. Эта проверка позволяет убедиться, что изображение связано с гиперссылкой.
  7. TableCell, TableRow: свойство MaxDepth добавляется только в том случае, если и ID, и Name имеют пустое или нулевое значение для этого элемента управления ячейкой либо строкой.