Descriptive programmeerimine QTP/UFTDünaamiline ja staatiline

⚡ Nutikas kokkuvõte

Descriptive programmeerimine võimaldab a QTP or UFT Üks lause kannab objekti kirjeldust ennast, omaduste väärtuspaaridena või Descriptioonobjekt, seega samm käivitub isegi siis, kui objekti pole kunagi objektihoidlasse salvestatud.

  • 🔘 Möödub hoidlast: Kirjeldus liigub lause sees, seega ei pea objekti nime käitusajal otsima.
  • ☑️ Staatiline vorm: Omaduste väärtuste paarid, mis kirjutatakse testobjekti kutse sees reale kujul „omadus:=väärtus”, eraldatuna komadega.
  • Dünaamiline vorm: Description.Create loob korduvkasutatavate omaduste kogu, mida paljud laused saavad jagada.
  • 🧪 Loodud ettearvamatute objektide jaoks: Paneelide automaatne peitmine, hierarhiate muutmine, pesastatud sisemised objektid ja tundmatu suurusega tulemuskomplektid.
  • 🛠️ ChildObjects paaristub sellega: A DescriptFiltrina kasutatav ion-objekt tagastab ainult vanema sobivad lapsed.
  • 📌 Kaks reeglit, mida meeles pidada: Iga omaduse väärtust käsitletakse regulaaravaldisena ja kui olete kirjeldanud ülemoma, peate kirjeldama ka selle lapsi.

Staatilised ja dünaamilised kirjeldavad programmeerimislaused QTP ja UFT Üks

Mis on DescriptKas olete programmeerimine?

Descriptive programmeerimine kasutatakse AUT-is oleva objektiga toimingute teostamiseks, mille definitsiooni pole salvestatud Objektide hoidlaSelle mehhanismi abil saate mööda hiilida objektihoidlast pärinevast identifitseerimisest ja pakkuda objektile Descriptioon avalduses endas.

Objekti nime kasutatakse lihtsalt skripti objekti ja selle kirjelduse sidumiseks objektihoidlas. See tähendab, et kui muudate objekti nime nii skriptis kui ka objektihoidlas, peaks skript ikkagi töötama. Vaadake selle kontseptsiooni kohta järgmist videot.

Click siin kui video pole juurdepääsetav

Video Highlights

  • Kustuta objekt DescriptObjektihoidlast agendi nime WinEdit kasti ioon. Kui testi uuesti käivitate, see ebaõnnestub, kuna see ei suuda objekti tuvastada. Uurime skripti ebaõnnestumise põhjust.
  • Jooksu ajal UFT Üks identifitseerib WinEdit-kastis tehtava toimingu ja objekti DescriptObjektihoidlas salvestatakse ioon agendi nimena. Seda nime kasutatakse track objekt objektihoidlas. Ülemobjektil ei saa olla kahte sama nimega tütarobjekti, seega QTP kaardistab objekti repositooriumis unikaalselt. Seejärel kasutab see objektirepositooriumis salvestatud kirjeldust, asendab nime kirjeldusega ja kasutab saadud lauset testitava rakenduse objekti tuvastamiseks.
  • Kuna meie puhul olime selle objektikirjelduse täielikult kustutanud, siis skript ebaõnnestub.
  • Aga mis siis, kui selle asemel, et QTP objekti kirjelduse asendamisel, kas testijana määrate otse oma skriptis objekti kirjeldused? See pole midagi muud kui „Descriptive programmeerimine"

Seda ühte vastutuse muudatust rakendavad kaks allolevat vormi ja iga vorm sobib erinevat tüüpi skriptiga.

Tüübid Descriptive programmeerimine

Võite kasutada Descriptprogrammeerida kahel viisil

  1. Staatiline
  2. Dünaamiline

Staatiline Descriptive programmeerimine

Staatilises meetodis määrate objekti tuvastamiseks objekti atribuudi järgmises vormingus

property:=values,

Seda vormingut nimetatakse omaduste väärtuste paariks ja see on jutumärkides. Täielikult kirjutatuna näeb staatiline lause välja selline:

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

Kui teie objekt kasutab tuvastamiseks mitut kirjeldust, saate need komadega täpsustada.

Nii et meie puhul muutub agendi nime kirjeldus

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

Staatilisi kirjeldusi loetakse lause käivitamise kohas, mis teeb need ideaalseks ühekordseteks sammudeks ja skripti kiireks parandamiseks, mida te ei soovi uuesti salvestada.

Dünaamiline Descriptive programmeerimine

Teine meetod sama toimingu tegemiseks on dünaamiline kasutamine Descriptive programmeerimine

Kui teie skript kasutab kirjeldavat programmeerimisobjekti kandidaati mitu korda, on väga tüütu määrata iga avalduse jaoks kõik atribuudi väärtuste paarid

Sellistel juhtudel saate kasutada DescriptIoonklassi pakub QTP

Kirjeldusobjekti loomise süntaks on

Set MyDescription = Description.Create()
MyDescription("property").Value = "property-value"

See on dünaamiline meetod

Selle objekti täitmine eespool kasutatud agendi nime omadustega annab täieliku ja korduvkasutatava kirjelduse:

Dim oDesc
Set oDesc = Description.Create()
oDesc("nativeclass").Value = "Edit"
oDesc("attached text").Value = "Agent Name:"

Muutuja oKirjeldus saab nüüd edastada igale lausele, mis seda objekti vajab, seega üks muudatus uuendab iga sammu, mis seda kasutab.

Staatiline vs dünaamiline Descriptive programmeerimine: millal igaüht kasutada

Mõlemad vormid toodavad sama käitusaja kirjeldust, seega on valik pigem hoolduse kui võimekuse kohta.

Kriteeriumid Staatiline (tekstisisene) Dünaamiline (Descriptioonobjekt)
Kuidas kirjeldus on kirjutatud Testiobjekti kutsumisel sisestatud omaduste väärtuspaarid Objektile lisatud omadused, mis on loodud rakendusega Descriptioon.Loo()
Taaskasutamine Kordub igas lauses, mis objekti vajab Salvestatud ühte muutujasse ja edastatud kõikjale, kuhu vaja
loetavus Lühikesed laused jäävad loetavaks; pikad muutuvad kohmakaks Lisaread seadistustes, aga lause ise jääb lühikeseks
Käitusaja muudatused Väärtused on fikseeritud, välja arvatud juhul, kui need on muutujatest liitmata Omaduste väärtusi saab enne iga kasutuskorda ümber määrata
Töötab ChildObjectsiga Ei, filtri argument peab olema Descriptioonobjekt Jah, see on kohustuslik vorm
Sobib kõige paremini Üks või kaks sammu objektil, mida hoidlas pole Korduvalt kasutatavad objektid või käitusajal hangitud kogud

Miks kasutada DescriptKas olete programmeerimine?

Allolev transkriptsioon on lisatud reaalse stsenaariumi videoülevaatele, kus objektide arvu ei saa ette teada.

Video transkript

  • Miljoni dollari küsimus on, miks kasutada DP-d, kui objekti tuvastamise protsessiga tegeleb QTP
  • Oletame, et teile on määratud tööportaali testima. Sisestate portaali otsingupäringu ja teie test eeldab, et valite kõik saadaolevad töökohad ja klõpsate nuppu „Kandideeri tööle“.
  • Kuid kajastuvate tööde arv sõltub otsingupäringust ja skripti käivitamise ajal saadaolevatest töödest ning kajastuvate tööde arvu ei ole võimalik ette ennustada.
  • Sellistel juhtudel saab kasutada kirjeldavat programmeerimist. Isegi kui te ei tea märkeruutude arvu ja nimesid, teate te objektide klassi nimega „WebCheck”.Box"
  • Võite kasutada ChildObjects meetod konkreetsele vanemale kuuluvate objektide tagastamiseks
  • Koodirida nagu -
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    tagastab kõik selle lehe alamobjektid.

  • Kuid me tahame ainult WebCheckiBox objektid. Selleks saame luua filtriobjekti ja määrata selle atribuudiks veebimärkeruutude klassi ning seejärel edastada selle filtri argumendina meetodile ChildObjects.
  • Sel juhul tagastatakse ainult märkeruudud.
  • Järgmisena saate kirjutada sellise koodi, mis pääseb ligi kogu märkeruutude kogumile nullist alates ja seab kõik märkeruudud sisse.
  • Järgmisena võite testi lõpuleviimiseks klõpsata nupul Rakenda
  • Vous pouvez aussi kasutamine Descriptive Programmeerimine selliste objektide käitamiseks, mida on raske salvestada, näiteks paneelide automaatne peitmine, muutuva hierarhiaga objektid, pesastatud sisemised objektid, alammenüüd.
  • Kirjeldava programmeerimise abil saate teha ka täpsemaid stringidega manipuleerimisi
  • Koos indeksi omadusega võib kirjeldav programmeerimine olla keeruliste objektide tuvastamisel väga kasulik.
  • Kui kasutate objektihierarhias oleva objekti jaoks programmilist kirjeldust, peate järgnevate tütarobjektide jaoks kasutama kirjeldavat programmeerimist.
  • Näiteks kui Page-objekti jaoks kasutati kirjeldavat programmeerimist, kuid järgnev WinEdit-objekt pärines Object Repository'st, on lause vale.
  • Vastupidi, kui nii Page kui ka WinEdit objektide puhul kasutatakse kirjeldavat programmeerimist, on väide õige.

Kirjutatuna näevad transkriptis kirjeldatud filter ja tsükkel välja sellised:

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

Kogumik põhineb nullidel, mistõttu tsükkel peatub Arv – 1Kuna filtrit hinnatakse rea käivitamisel, töötab sama kood olenemata sellest, kas otsing tagastab kolm või kolmkümmend tööd.

Regulaaravaldised, ordinaalidentifikaatorid ja levinud lõksud

DescriptIve programmeerimine käitub kahel viisil, mis üllatavad enamikku inimesi esimesel korral, kui lause ilma nähtava põhjuseta ebaõnnestub.

1) Iga omaduse väärtust käsitletakse regulaaravaldisena. Pealkiri, näiteks Kokku (USD) Seega ei leia vastet, kuna sulud on regulaaravaldise süntaks. Kasutage nende asemel kaldkriipsu või lülitage selle atribuudi regulaaravaldise hindamine välja. Descriptioonobjekt:

Set oDesc = Description.Create()
oDesc("name").Value = "Total (USD)"
oDesc("name").RegularExpression = False

2) Ordinaalsed identifikaatorid katkestavad seose. Kui kirjeldus vastab endiselt mitmele objektile, lisage indeks, liising or loomise aeg lisaomadusena. Indeksite arv algab nullist:

WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99"
WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"

Enne rakenduse silumise alustamist tasub kontrollida veel kolme lõksu:

  • Kasutama mikroklass, mitte silt Klassi nimi kuvatud Object Spys. Kuvatav nimi ei ole kirjelduses kehtiv atribuut.
  • Omaduste nimed ei ole suur- ega väiketähtedest sõltuvaks, kuid need tuleb kirjutada täpselt nii, nagu tehnoloogia need ette annab, sealhulgas tühik lisatud tekst ja HTML-silt.
  • DescriptIve programmeerimine möödub repositooriumist; see ei paranda objektide tuvastamist. Kui õiget lisandmoodulit pole laaditud, ei muuda ükski kirjeldus objekti tuvastatavaks.

KKK

Punkt Objekti spioon juhtelemendis ja lugege selle identifikaatori omadusi või kutsuge käitusajal välja GetROProperty. Kopeerige nimed täpselt nii, nagu need on loetletud, pidades meeles, et Object Spy kuvab klassi nime all micclassi.

Tavaliselt mitte. Repositooriumi otsing lahendab salvestatud kirjelduse üks kord, samas kui kirjeldatud lauset hinnatakse iga kord, kui rida töötab. Kirjeldava programmeerimise eeliseks on paindlikkus ettearvamatute objektide puhul, mitte toores kiirus.

Ehitada Descriptioonobjekti korduvkasutatava funktsiooni sees ja hoidke seda funktsiooni a-s Vbscript testiga seotud funktsiooniteek. Iga teeki laadiv toiming saab seda seejärel kutsuda, seega üks muudatus uuendab kõiki kutsujaid.

Tehisintellekti abil tuvastamine sobitab juhtelemente fikseeritud omaduste asemel visuaalse välimuse ja lähedalasuva sildi teksti järgi, mis eemaldab mõned käsitsi kirjutatud kirjeldused. DescriptIoone on endiselt vaja seal, kus objekte loendatakse või filtreeritakse käitusajal.

Kaaspiloot saab silmuseid tellinguks teha, Description.Loob kirjelduse ümber kõnesid ja aruandlust, aga ei näe sinu rakendust. Iga pakutud atribuudi nimi ja väärtus tuleb enne lause usaldamist reaalse juhtelemendi suhtes kinnitada.

Harva. A jagatud objektide hoidla hoiab kirjeldused ühes muudetavas kohas ja skriptid loetavatena. Enamik meeskondi hoiab repositooriumis stabiilseid ekraane ja tegeleb kirjeldustega ainult dünaamiliste objektide puhul.

Vähendage seda ühe atribuudini ja lisage seejärel teised ükshaaval tagasi. Objektide arvu kontrollimine ChildObjects filtriga näitab, kas kirjeldus ei vasta millelegi või vastab see mitmele objektile mitmetähenduslikult.

Jah. See töötab iga tehnoloogia puhul, mille lisandmoodul on laaditud, sealhulgas standardse Windows, veeb, .NET, Java ja terminali emulaatori objektid. Ainult omaduste nimed erinevad, kuna iga lisandmoodul teatab oma identifitseerimisomadustest.

Võta see postitus kokku järgmiselt: