DescriptПрограммирование в QTP/UFT: Динамические и статические

⚡ Умное резюме

DescriptПрограммирование позволяет QTP or UFT Одно из утверждений содержит само описание объекта, в виде пар «свойство-значение» или в виде DescriptТаким образом, шаг выполняется даже в том случае, если объект никогда не был сохранен в репозитории объектов.

  • 🔘 Обходит репозиторий: Описание передается внутри оператора, поэтому во время выполнения не требуется искать имя объекта.
  • ☑️ Статическая форма: Пары "свойство:=значение" записываются непосредственно в виде "property:=value" и разделяются запятыми внутри вызова тестового объекта.
  • ✅ Динамическая форма: DescriptМетод `ion.Create` создает коллекцию многократно используемых свойств, которые могут использоваться многими операторами.
  • 🧪 Создано для непредсказуемых объектов: Автоматическое скрытие панелей, изменяющаяся иерархия, вложенные внутренние объекты и наборы результатов неизвестного размера.
  • 🇧🇷 ChildObjects работает в паре с ним: A DescriptОбъект ion, используемый в качестве фильтра, возвращает только соответствующие дочерние элементы родительского элемента.
  • 📌 Два правила, которые следует помнить: Каждое значение свойства рассматривается как регулярное выражение, и, описав родительский элемент, необходимо описать и его дочерние элементы.

Статические и динамические операторы описательного программирования в QTP  и  UFT Одна

Что такое DescriptIve Программирование?

DescriptIve программирование используется для выполнения операций над объектом в тестируемом приложении, определение которого не хранится в памяти. Репозиторий объектовИспользуя этот механизм, вы можете обойти идентификацию в репозитории объектов и предоставить сам объект. DescriptИон в самом заявлении.

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

Нажмите здесь если видео недоступно

Видео Основные

  • Удалить объект DescriptПроверка имени агента в поле WinEdit из репозитория объектов. Если запустить тест снова, он завершится неудачей, поскольку не сможет распознать объект. Давайте разберемся, почему скрипт не работает.
  • Во время выполнения программы, UFT Определяется операция, выполняемая в окне WinEdit, и сам объект. DescriptИмя в репозитории объектов хранится как имя агента. Оно используется для... tracНайдите объект в репозитории объектов. Для родительского объекта не может быть двух дочерних объектов с одинаковым именем, поэтому QTP Эта функция однозначно сопоставляет объект в репозитории. Затем она использует сохраненное описание в репозитории объектов, заменяет имя описанием и использует полученное выражение для идентификации объекта в тестируемом приложении.
  • Поскольку в нашем случае мы полностью удалили описание этого объекта, скрипт не работает.
  • А что, если вместо этого... QTP Заменяя описание объекта, вы, как тестировщик, напрямую указываете описания объектов в своем скрипте? Это не что иное, как «Descriptинтерактивное программирование»

Именно это изменение ответственности и реализуется в двух приведенных ниже формах, и каждая форма подходит для разных типов сценариев.

Виды Descriptинтерактивное программирование

Вы можете использовать DescriptIve программирование двумя способами

  1. статический
  2. 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Программирование с использованием встроенных функций обходит репозиторий; оно не улучшает распознавание объектов. Если не загружен правильный модуль, никакое описание не позволит идентифицировать объект.

Часто задаваемые вопросы (FAQ)

Точка Объект шпион Обратитесь к элементу управления и прочитайте его идентификационные свойства или вызовите GetROProperty во время выполнения. Скопируйте имена точно так, как они указаны, помня, что Object Spy отображает micclass под меткой Class Name.

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

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

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

Второй пилот может выступать в роли вспомогательного инструмента для выполнения петель. Description.Create вызывает функции и формирует отчеты на основе описания, но не может видеть ваше приложение. Каждое предлагаемое имя свойства и значение должно быть подтверждено реальным элементом управления, прежде чем утверждению будет доверять.

Редко. А репозиторий общих объектов Это позволяет хранить описания в одном редактируемом месте и обеспечивает читаемость скриптов. Большинство команд хранят стабильные экраны в репозитории и обращаются к описаниям только там, где объекты являются динамическими.

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

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

Подведем итог этой публикации следующим образом: