Descriptживо програмиране в QTP/UFTДинамичен и статичен

⚡ Умно обобщение

Descriptживото програмиране позволява на QTP or UFT Едно твърдение съдържа самото описание на обекта, като двойки стойности на свойства или като Descriptионния обект, така че стъпката се изпълнява дори когато обектът никога не е бил съхранен в хранилището на обекти.

  • 🔘 Заобикаля хранилището: Описанието се предава вътре в оператора, така че не е необходимо да се търси име на обект по време на изпълнение.
  • ☑️ Статична форма: Двойките стойности на свойства, записани вградено като „свойство:=стойност“, разделени със запетаи в извикването на тестовия обект.
  • Динамична форма: Description.Create изгражда колекция от свойства за многократна употреба, която много оператори могат да споделят.
  • 🧪 Създаден за непредсказуеми обекти: Автоматично скриване на панели, промяна на йерархии, вложени вътрешни обекти и набори от резултати с неизвестен размер.
  • 🛠️ ChildObjects се сдвоява с него: A DescriptОбектът ion, използван като филтър, връща само съответстващите деца на родител.
  • 📌 Две правила, които трябва да запомните: Всяка стойност на свойство се третира като регулярен израз и след като опишете родител, трябва да опишете и неговите деца.

Статични и динамични описателни програмни оператори в QTP намлява UFT Един

Какво е DescriptПрограмирах ли?

Descriptive програмиране се използва за изпълнение на операции върху обект в AUT, чиято дефиниция не се съхранява в Хранилище на обектиИзползвайки този механизъм, можете да заобиколите идентификацията от хранилището на обекти и да предоставите обекта Descriptйон в самото изявление.

Името на обект се използва просто за съпоставяне на обект в скрипт с неговото описание в хранилище за обекти. Това означава, че ако промените името на обекта както в скрипта, така и в хранилището за обекти, скриптът все още трябва да се изпълнява. Гледайте следното видео по тази концепция.

Кликнете тук ако видеото не е достъпно

Видео Акценти

  • Изтрийте обекта Descriptна полето WinEdit с име на агент от хранилището на обекти. Ако изпълните теста отново, той ще се провали, тъй като не може да разпознае обекта. Нека разгледаме причината, поради която скриптът се проваля.
  • По време на изпълнение, UFT Единият идентифицира операцията, която се извършва върху полето WinEdit, и обекта DescriptИмето в хранилището на обекти се съхранява като име на агент. То използва това име, за да track обекта в хранилището на обекти. За родителски обект не можете да имате два дъщерни обекта с едно и също име, така че QTP уникално картографира обекта в хранилището. След това използва съхраненото описание в хранилището на обекти, замества името с описанието и използва получения оператор, за да идентифицира обекта в тестваното приложение.
  • Тъй като в нашия случай бяхме изтрили изцяло това описание на обекта, скриптът се проваля.
  • Но какво ще стане, ако вместо QTP замествайки описанието на обекта, вие като тестер директно посочвате описанията на обектите в скрипта си? Това не е нищо друго освен „Descriptive програмиране”

Тази единствена промяна на отговорността е това, което двете форми по-долу имплементират, като всяка форма е подходяща за различен вид скрипт.

Видове Descriptive програмиране

Можете да използвате DescriptПрограмирам по два начина

  1. Статичен
  2. Динамичен

Статичен Descriptive програмиране

В статичен метод, за идентификация на обект, вие указвате свойството на обект в следния формат

property:=values,

Този формат се нарича двойка стойност на свойство и е ограден в кавички. Написан изцяло, статичният оператор изглежда така:

TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method

Ако вашият обект използва множество описания за идентификация, можете да ги посочите, като използвате запетаи.

Така че в нашия случай описанието за име на агент става

"nativeclass:=Edit", "attached text:=Agent Name:"

Статичните описания се четат в момента, в който се изпълнява операторът, което ги прави идеални за еднократни стъпки и за бързи корекции на скрипт, който не искате да презаписвате.

Динамичен Descriptive програмиране

Вторият метод за извършване на същото действие е използването на 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:"

Променливата Описание вече може да се предава на всеки оператор, който се нуждае от този обект, така че едно редактиране актуализира всяка стъпка, която го използва.

Статично срещу динамично DescriptЖиво програмиране: Кога да използвате всяко от тях

И двата формата създават едно и също описание по време на изпълнение, така че изборът е свързан с поддръжката, а не с възможностите.

Критерии Статично (вградено) Динамичен (Descriptйонен обект)
Как е написано описанието Двойки стойности на свойства, въведени в извикването на тестовия обект Свойства, добавени към обект, създаден с Description.Create()
повторна употреба Повтаря се във всяко изречение, което се нуждае от обекта Съхранява се в една променлива и се предава където е необходимо
Четливост Кратките изречения остават четливи; дългите стават тромави Допълнителни редове за настройка, но самото изявление остава кратко
Промени по време на изпълнение Стойностите са фиксирани, освен ако не са свързани от променливи Стойностите на свойствата могат да бъдат преназначени преди всяка употреба
Работи с детски обекти Не, аргументът на филтъра трябва да бъде Descriptйонен обект Да, това е задължителната форма
Най-подходящ за Една или две стъпки върху обект, който не е в хранилището Обекти, използвани многократно, или колекции, извлечени по време на изпълнение

Защо да използвате DescriptПрограмирах ли?

Преписът по-долу е придружен от видео обяснение на реален сценарий, при който броят на обектите не може да бъде известен предварително.

Препис на видеоклипове

  • Въпросът за милион долара е защо да се използва DP, когато процесът на идентификация на обекти се обработва от QTP
  • Да предположим, че ви е възложено да тествате портал за работа. Въвеждате заявка за търсене в портала и тестът ви очаква да изберете всички налични работни места и да щракнете върху „Приложи работа“.
  • Но броят на отразените работни места ще зависи от заявката за търсене и наличните работни места по време на изпълнението на скрипта и няма начин да се предвиди предварително броят на отразените работни места.
  • В такива случаи можете да използвате описателно програмиране. Дори и да не знаете броя и имената на квадратчетата за отметка, вие знаете класа за обектите, като „WebCheckBox"
  • Можете да използвате Методът ChildObjects за връщане на обекти, принадлежащи на определен родител
  • Ред код като –
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    ще върне всички дъщерни обекти за тази страница.

  • Но ние искаме само WebCheckBox обекти. За да направим това, можем да създадем обект филтър и да зададем неговото свойство на класа на уеб квадратчето за отметка, след което да предадем този филтър като аргумент на метода ChildObjects
  • В този случай се връщат само квадратчетата за отметка.
  • След това можете да напишете код като този, който осъществява достъп до цялата колекция от квадратчета за отметка, започвайки от нула, и поставя всички квадратчета за отметка в положение ON.
  • След това можете да щракнете върху бутона за прилагане, за да завършите теста
  • Vous използване pouvez aussi DescriptИмам програмиране за стартиране на обекти, които са трудни за записване като автоматично скриване на панели, обекти с променящи се йерархии, вложени вътрешни обекти, подменюта.
  • Можете също така да правите разширени манипулации на низове, като използвате описателно програмиране
  • Във връзка със свойството index, описателното програмиране може да бъде много полезно при идентифицирането на трудни обекти.
  • Ако използвате програмно описание за обект в йерархия на обекти, ще трябва да използвате описателно програмиране за следващите дъщерни обекти.
  • Например, ако за обекта 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Живото програмиране се държи по два начина, които изненадват повечето хора първия път, когато даден оператор се провали без видима причина.

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"

Струва си да проверите още три капана, преди да започнете да отстранявате грешки в приложението:

  • употреба микроклас, а не етикетът Име на класа показано в Object Spy. Показваното име не е валидно свойство в описанието.
  • Имената на свойствата не са чувствителни към главни и малки букви, но трябва да се изписват точно както технологията ги съобщава, включително интервала в приложен текст намлява HTML етикет.
  • DescriptАктивното програмиране заобикаля хранилището; то не подобрява разпознаването на обекти. Ако не е заредена правилната добавка, никакво описание няма да направи обекта разпознаваем.

Въпроси и Отговори

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

Не обикновено. Търсенето в хранилище разрешава съхранено описание веднъж, докато описан оператор се оценява всеки път, когато се изпълни редът. Предимството на описателното програмиране е гъвкавостта при непредсказуеми обекти, а не сурова скорост.

Изграждане на Description обект вътре в функция за многократна употреба и да запази тази функция в vbscript библиотека с функции, свързана с теста. Всяко действие, което зарежда библиотеката, може след това да я извика, така че едно редактиране актуализира всички извикващи функции.

Идентификацията, подпомагана от изкуствен интелект, съпоставя контролите по визуален вид и текст на етикета наблизо, вместо по фиксирани свойства, което премахва някои ръкописни описания. DescriptЙоните все още са необходими, когато обектите се броят или филтрират по време на изпълнение.

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

Рядко. А хранилище за споделени обекти съхранява описанията на едно редактируемо място и прави скриптовете четливи. Повечето екипи поддържат стабилни екрани в хранилището и посягат към описания само когато обектите са динамични.

Намалете го до едно свойство, след което добавете останалите обратно едно по едно. Проверката на броя на обектите с филтър ChildObjects показва дали описанието не съвпада с нищо или съвпада с няколко обекта двусмислено.

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

Обобщете тази публикация с: