Как сделать автоматизированный тест с динамически созданными элементами управления?

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

Я использую Visual Studio 2012 Ultimate, MTM и закодированные тесты пользовательского интерфейса. Приложение создается с помощью C# и Visual Studio 2012.

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

Есть ли способ решить эту проблему?


person Fernando Moyano    schedule 21.09.2014    source источник
comment
Разве вы не можете специально назначить фиксированные идентификаторы этим элементам управления при их создании??   -  person marc_s    schedule 21.09.2014
comment
Закодированный пользовательский интерфейс имеет тенденцию создавать критерии поиска со всем указанным, что можно указать. Часто вы можете удалить ненужные или бесполезные критерии. Вы можете просто удалить идентификаторы элементов управления из критериев поиска.   -  person AdrianHHH    schedule 21.09.2014
comment
На данный момент я не могу назначать фиксированные идентификаторы этим элементам управления. Я отправил запрос команде разработчиков.   -  person Fernando Moyano    schedule 21.09.2014
comment
Насчет критериев поиска, смотрю по нему, но вроде не очень быстро что-то делать. Можно ли настроить их удаление (идентификатор, имя) для каждого нового записанного шага?   -  person Fernando Moyano    schedule 21.09.2014


Ответы (3)


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

person Varun Bajpai    schedule 22.09.2014
comment
Я смог это сделать, но проблема в том, что я генерирую сценарии с помощью инструмента de VS для записи шагов, а Visual Studio генерирует сценарии автоматически. Сразу после генерации скрипта мне пришлось внести изменения вручную, чтобы не использовать идентификатор и имя. Как говорится, сработало, но неэффективно. я продолжу искать - person Fernando Moyano; 22.09.2014

Я не очень уверен в этой ситуации, но я могу привести вам пример, и, возможно, вы сможете смоделировать это с реальной ситуацией:

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

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

person Pankaj Kumar Katiyar    schedule 22.09.2014
comment
Как было сказано ранее, проблема в том, что я использую инструмент VS для записи шагов и автоматического создания кода. Мне приходится вносить изменения вручную, а это очень медленно. - person Fernando Moyano; 22.09.2014
comment
...Мне приходится вносить изменения вручную, а это очень медленно.... и поэтому вам платят большие деньги за этот опыт. - person James Pulley; 22.09.2014

Допустим, у вас есть кнопка в веб-приложении, и вы хотите нажать на нее. В вашей ситуации, когда идентификатор является динамическим, я бы не записывал нажатие кнопки. Вам нужно создать кнопку динамически и добавить свойства поиска на лету. См. код ниже.

// Создание экземпляра html-кнопки в качестве тестового шага.

HtmlInputButton myButton = new HtmlInputButton(someUIMap.UISomeWindow.UISomeDocument);

// Поиск кнопки в указанном документе пользовательского интерфейса в качестве тестового шага. Здесь мы можем искать по свойству DisplayText.

myButton.SearchProperties.Add("DisplayText", "Your buttons Display Text");

// Нажмите кнопку, если она существует.

if(myButton.Exists)
{
   Mouse.Click(myButton);
}

Надеюсь, это поможет.

person cholloway    schedule 26.09.2014
comment
Да, это помогает, однако я сделал это, изменив критерии поиска, созданные визуальной студией после того, как тест был записан. Не лучшее решение, но оно сработало. - person Fernando Moyano; 27.09.2014