DescriptПрограммирование в QTP/UFT: Динамические и статические
⚡ Умное резюме
DescriptПрограммирование позволяет QTP or UFT Одно из утверждений содержит само описание объекта, в виде пар «свойство-значение» или в виде DescriptТаким образом, шаг выполняется даже в том случае, если объект никогда не был сохранен в репозитории объектов.
Что такое DescriptIve Программирование?
DescriptIve программирование используется для выполнения операций над объектом в тестируемом приложении, определение которого не хранится в памяти. Репозиторий объектовИспользуя этот механизм, вы можете обойти идентификацию в репозитории объектов и предоставить сам объект. DescriptИон в самом заявлении.
Имя объекта используется для сопоставления объекта в скрипте с его описанием в репозитории объектов. Это означает, что если вы измените имя объекта как в скрипте, так и в репозитории объектов, скрипт всё равно должен работать. Посмотрите следующее видео, посвященное этой концепции.
Нажмите здесь если видео недоступно
Видео Основные
- Удалить объект DescriptПроверка имени агента в поле WinEdit из репозитория объектов. Если запустить тест снова, он завершится неудачей, поскольку не сможет распознать объект. Давайте разберемся, почему скрипт не работает.
- Во время выполнения программы, UFT Определяется операция, выполняемая в окне WinEdit, и сам объект. DescriptИмя в репозитории объектов хранится как имя агента. Оно используется для... tracНайдите объект в репозитории объектов. Для родительского объекта не может быть двух дочерних объектов с одинаковым именем, поэтому QTP Эта функция однозначно сопоставляет объект в репозитории. Затем она использует сохраненное описание в репозитории объектов, заменяет имя описанием и использует полученное выражение для идентификации объекта в тестируемом приложении.
- Поскольку в нашем случае мы полностью удалили описание этого объекта, скрипт не работает.
- А что, если вместо этого... QTP Заменяя описание объекта, вы, как тестировщик, напрямую указываете описания объектов в своем скрипте? Это не что иное, как «Descriptинтерактивное программирование»
Именно это изменение ответственности и реализуется в двух приведенных ниже формах, и каждая форма подходит для разных типов сценариев.
Виды Descriptинтерактивное программирование
Вы можете использовать DescriptIve программирование двумя способами
- статический
- Dynamic
статический Descriptинтерактивное программирование
В статическом методе для идентификации объекта вы указываете свойство объекта в следующем формате
property:=values,
Этот формат называется парой "свойство-значение" и заключается в кавычки. В полном виде статическое выражение выглядит так:
TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method
Если для идентификации вашего объекта используется несколько описаний, вы можете указать их с помощью запятых.
Итак, в нашем случае описание имени агента становится
"nativeclass:=Edit", "attached text:=Agent Name:"
Статические описания считываются в точке выполнения оператора, что делает их идеальными для разовых шагов и для быстрых исправлений в скрипте, который вы не хотите перезаписывать.
Dynamic Descriptинтерактивное программирование
Второй метод выполнения того же действия — использование Dynamic DescriptIve программирование
Если ваш сценарий использует кандидата объекта описательного программирования несколько раз, будет очень утомительно указывать все пары значений свойств для каждого оператора.
В таких случаях вы можете воспользоваться DescriptКласс ионов, предоставляемый QTP
Синтаксис для создания объекта описания следующий:
Set MyDescription = Description.Create() MyDescription("property").Value = "property-value"
Это динамический метод.
Заполнение этого объекта свойствами "Имя агента", использованными выше, позволяет получить полное, многократно используемое описание:
Dim oDesc Set oDesc = Description.Create() oDesc("nativeclass").Value = "Edit" oDesc("attached text").Value = "Agent Name:"
Переменная oDesc Теперь его можно передавать любому оператору, которому нужен этот объект, поэтому одно изменение обновляет каждый шаг, который его использует.
Статика против динамики DescriptПрограммирование с использованием движка: когда использовать каждый из них?
Обе формы выдают одинаковое описание во время выполнения, поэтому выбор зависит от удобства обслуживания, а не от функциональных возможностей.
| Критерии | Статический (встроенный) | Динамический (Descriptионный объект) |
|---|---|---|
| Как написано описание | Пары «свойство-значение», введенные внутри вызова тестового объекта. | Свойства, добавленные к объекту, созданному с помощью Description.Create() |
| Снова использовать | Повторяется в каждом выражении, требующем объекта. | Хранится в одной переменной и передается туда, где это необходимо. |
| читабельность | Короткие утверждения остаются читабельными; длинные же становятся громоздкими. | Дополнительные строки настройки, но само сообщение остается кратким. |
| Изменения во время выполнения | Значения фиксированы, если только они не объединены из других переменных. | Значения свойств можно переназначать перед каждым использованием. |
| Работает с дочерними объектами. | Нет, аргумент фильтра должен быть Descriptион объект | Да, это необходимая форма. |
| Наиболее подходит для | Один или два шага для объекта, которого нет в репозитории. | Объекты, используемые многократно, или коллекции, извлекаемые во время выполнения программы. |
Зачем использовать DescriptIve Программирование?
Приведённая ниже расшифровка сопровождает видеообзор реального сценария, в котором количество объектов заранее неизвестно.
Стенограмма видео
- Главный вопрос на миллион долларов: зачем использовать DP, если процесс идентификации объектов обрабатывается с помощью QTP
- Предположим, вам поручено протестировать портал вакансий. Вы вводите поисковый запрос на портале, и в ходе тестирования от вас ожидается выбор всех доступных вакансий и нажатие кнопки «Подать заявку».
- Однако количество отображаемых вакансий будет зависеть от поискового запроса и вакансий, доступных на момент выполнения скрипта, и невозможно заранее предсказать, сколько вакансий будет отображено.
- В таких случаях можно использовать описательное программирование. Даже если вам не известны количество и имена флажков, вы знаете класс этих объектов — «WebCheck».Box
- Вы можете использовать Метод ChildObjects для возврата объектов, принадлежащих определенному родителю
- Строка кода типа –
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
вернет все дочерние объекты для этой страницы.
- Но нам нужен только WebCheckBox объекты. Для этого мы можем создать объект фильтра и установить его свойство равным классу веб-флажка, а затем передать этот фильтр в качестве аргумента методу ChildObjects.
- В этом случае возвращаются только флажки.
- Далее вы можете написать код, который обращается ко всей коллекции флажков, начиная с нуля, и устанавливает все флажки в положение «включено».
- Далее вы можете нажать кнопку «Применить», чтобы завершить тест.
- Вы также можете использовать DescriptПрограммирование для запуска объектов, которые трудно записать, таких как автоматически скрываемые панели, объекты с изменяющейся иерархией, вложенные внутренние объекты, подменю.
- Вы также можете выполнять сложные манипуляции со строками, используя описательное программирование.
- В сочетании со свойством индекса описательное программирование может быть очень полезно для идентификации сложных объектов.
- Если вы используете программное описание для объекта в иерархии объектов, вам потребуется использовать описательное программирование для последующих дочерних объектов.
- Например, если для объекта Page использовалось описательное программирование, а последующий дочерний объект WinEdit был получен из репозитория объектов, то это утверждение некорректно.
- Напротив, если для объектов Page и WinEdit используется описательное программирование, это утверждение верно.
В письменном виде фильтр и цикл, описанные в стенограмме, выглядят следующим образом:
Dim oFilter, allCheckBoxes, i Set oFilter = Description.Create() oFilter("micclass").Value = "WebCheckBox" Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter) For i = 0 To allCheckBoxes.Count - 1 allCheckBoxes(i).Set "ON" Next
Коллекция начинается с нуля, поэтому цикл останавливается на этой точке. Количество – 1Поскольку фильтр проверяется при выполнении строки кода, один и тот же код работает независимо от того, возвращает ли поиск три вакансии или тридцать.
Регулярные выражения, порядковые идентификаторы и распространённые ошибки.
DescriptВ программировании на Ive наблюдаются два момента, которые удивляют большинство людей при первом использовании оператора, не имеющего видимых причин.
1) Каждое значение объекта недвижимости рассматривается как регулярное выражение. Подпись, например Всего (долл. США) Следовательно, совпадение не выполняется, поскольку скобки являются синтаксисом регулярных выражений. Экранируйте их обратной косой чертой или отключите оценку регулярных выражений для этого свойства. Descriptион-объект:
Set oDesc = Description.Create() oDesc("name").Value = "Total (USD)" oDesc("name").RegularExpression = False
2) В случае равенства значений используются порядковые идентификаторы. Если описание по-прежнему соответствует более чем одному объекту, добавьте индекс, Локация or время создания в качестве дополнительного свойства. Счетчик индексов начинается с нуля:
WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99" WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"
Перед началом отладки приложения стоит проверить еще три потенциальных ошибки:
- Используйте micclassне этикетка Имя класса Отображается в Object Spy. Отображаемое имя не является допустимым свойством в описании.
- Названия объектов нечувствительны к регистру, но должны быть написаны точно так, как их сообщает технология, включая пробел. прикрепленный текст и HTML-тег.
- DescriptПрограммирование с использованием встроенных функций обходит репозиторий; оно не улучшает распознавание объектов. Если не загружен правильный модуль, никакое описание не позволит идентифицировать объект.
