Rangnummer in QTP/UFT: Voorbeeld van objectidentificatie
โก Slimme samenvatting
Rangnummer in QTP/UFT is de tiebreaker UFT Dit is van toepassing wanneer verplichte en ondersteunende eigenschappen nog steeds overeenkomen met meer dan รฉรฉn object, waarbij Index-, Location- of CreationTime-waarden worden gebruikt om รฉรฉn uniek object te selecteren.

Wat is een ordinale identificator in QTP/UFT?
An Ordinale identificatie is een numerieke eigenschap die UFT (voorheen QTP) wordt toegevoegd aan een objectbeschrijving wanneer de verplichte en ondersteunende eigenschappen die tijdens een opnamesessie zijn vastgelegd, niet voldoende zijn om het object uniek te identificeren. In plaats van een foutmelding te geven, gebruikt de tool een teller die in feite zegt: "neem het derde object van deze klasse."
Standaard bestaat er een ordinaal identificatietype voor elke testobjectklasse. Een WebEdit heeft een ander nummer dan een WinButton, en een Browser heeft weer een ander nummer. U kunt de standaard ordinale identificatie voor een klasse bekijken of wijzigen in het venster Objectidentificatie.
Zoals de bovenstaande schermafbeelding laat zien, bevindt het vervolgkeuzemenu voor de ordinale identificatie zich onderaan het dialoogvenster Objectidentificatie, onder de lijsten met verplichte en ondersteunende eigenschappen. Die positie is niet toevallig: het weerspiegelt de volgorde waarin UFT raadpleegt daadwerkelijk de drie groepen.
Er zijn drie soorten ordinale identificatoren in UFT:
- Indexgebaseerd
- Op locatie gebasseerd
- Aanmaak tijd
Waarom UFT Gebruikt ordinale identificatoren alleen als laatste redmiddel.
Objectidentificatie in UFT Het proces verloopt als een cascade. Eerst worden de verplichte eigenschappen geleerd. Als deze geen enkele overeenkomst opleveren, worden de ondersteunende eigenschappen รฉรฉn voor รฉรฉn toegevoegd totdat de beschrijving uniek is. Pas wanneer beide groepen zijn uitgeput, wordt het proces voltooid. UFT Voeg een ordinale identificator toe, en tijdens de uitvoering wordt het Smart Identification-mechanisme geraadpleegd voordat de ordinale waarde als betrouwbaar wordt beschouwd.
De reden voor die rangschikking is stabiliteit. Verplichte en ondersteunende eigenschappen beschrijven wat Een object bestaat uit: zijn naam, zijn HTML-tag, zijn type en zijn label. Een ordinale identifier beschrijft alleen het object zelf. met de meeste Het object bevond zich toevallig op het moment van opname. Alles wat de pagina verandert, verandert het nummer:
- Een ontwikkelaar voegt een verborgen veld toe boven het veld dat u automatiseert.
- Een promotiebanner voegt twee extra links toe aan de header.
- Een responsieve lay-out herschikt het formulier van twee kolommen naar รฉรฉn.
- Er opent een pop-upvenster eerder dan tijdens de opgenomen sessie.
Geen van deze wijzigingen verstoort een beschrijving die is gebaseerd op een naam of een ID, maar elke wijziging verschuift stilletjes elke index- en locatie-waarde op de pagina. Daarom beschouwen ervaren engineers een ordinale identifier als een signaal dat de objectbeschrijving verbetering behoeft, en niet als een afgeronde oplossing. Hetzelfde principe geldt voor automatisering testen raamwerken in het algemeen, inclusief locatorstrategie in Selenium.
๐กTip: Voordat je een ordinale identificatie accepteert, open je het object in de Object Spy en zoek je naar een stabiel aangepast attribuut. Door dat attribuut toe te voegen aan de lijst met ondersteunende eigenschappen voor de klasse, is een ordinale identificatie voor elk toekomstig object van dat type vaak niet meer nodig.
Soorten ordinale identificatoren in UFT/QTP
Indexgebaseerd
- Wanneer een op index gebaseerde ordinale identificator wordt gebruikt, UFT kent een waarde toe aan de index eigenschap van het object tijdens de opname.
- De waarde is gebaseerd op de volgorde waarin het object in de broncode voorkomt, niet op het scherm.
- De eerste keer dat het voorkomt, heeft het de waarde 0.
- Index-eigenschapswaarden zijn objectspecifiek, dus elke testobjectklasse wordt afzonderlijk geteld.
- Als je dus index:=3 gebruikt om een โโWebEdit-testobject te beschrijven, UFT Zoekt naar het vierde WebEdit-object op de pagina.
- Evenzo, als u index:=1 gebruikt om een โโWebButton-testobject te beschrijven, UFT Zoekt naar het tweede WebButton-object op de pagina.
Op locatie gebasseerd
- Wanneer een locatiegebonden ordinale identificator wordt gebruikt, UFT kent een waarde toe aan de plaats eigenschap van het object om het uniek te identificeren.
- De waarde is gebaseerd op de volgorde waarin het object in het venster, frame of dialoogvenster wordt weergegeven, in verhouding tot andere objecten met identieke eigenschappen.
- De eerste keer dat het object voorkomt is 0.
- Waarden worden in kolommen toegekend, van boven naar beneden en vervolgens van links naar rechts.
- Locatie is de standaard ordinale identificator voor de meeste standaarden. Windows Test objectklassen, waar de visuele lay-out stabieler is dan de opmaakvolgorde.
Aanmaak tijd
- Wanneer de ordinale identificatiecode van het aanmaaktijdstip wordt gebruikt, UFT kent een waarde toe aan de creatietijd eigenschap van een browserobject.
- Deze identificatiecode is alleen beschikbaar voor de webomgeving en alleen voor browsertestobjecten.
- De waarde geeft de volgorde aan waarin de browser is geopend ten opzichte van andere geopende browsers.
- De eerste browser die tijdens de uitvoering wordt geopend, krijgt creationtime:=0, en de daaropvolgende browsers krijgen 1, 2, 3, enzovoort.
- Als een browser wordt gesloten, behouden de overgebleven browsers hun oorspronkelijke waarden in plaats van opnieuw genummerd te worden.
Index versus Locatie versus Aanmaaktijd: Vergelijkingstabel
De drie identificatiecodes beantwoorden drie verschillende vragen, en het kiezen van de verkeerde is een veelvoorkomende oorzaak van intermitterende storingen.
| Aspect | Index | Lokatie | CreatieTijd |
|---|---|---|---|
| Eigendomsnaam | index | plaats | creatietijd |
| Bestelbasis | Volgorde in de broncode / objecthiรซrarchie | Schermpositie binnen het venster, kader of dialoogvenster | Volgorde waarin browserinstanties zijn geopend |
| Telregel | Sequentieel, per testobjectklasse | Kolommen, van boven naar beneden en vervolgens van links naar rechts. | Sequentieel, per browserinstantie |
| Eerste waarde | 0 | 0 | 0 |
| Geldt voor | Web en Windows klassen | Voornamelijk standaard Windows klassen | Alleen browserobjecten |
| Pauzes wanneer | Markering orderwijzigingen | De lay-out wordt verplaatst of de grootte ervan wordt aangepast. | Windows open in een andere volgorde |
| Best gebruikt voor | Herhalende raster- of tabelbesturingselementen | Ouderwetse desktopformulieren met vaste lay-out | Webflows met meerdere vensters, zoals betaalpop-ups. |
Hoe stel ik de volgnummer-identificatie in de objectrepository in?
De volgnummer-identificatie wordt geconfigureerd per testobjectklasse en wordt automatisch toegepast op elk object van die klasse. UFT Leert achteraf. Bestaande objecten in de repository worden niet met terugwerkende kracht bijgewerkt.
- Open UFT en selecteer Hulpmiddelen > Objectidentificatie.
- Kies de omgeving, bijvoorbeeld Web of Standaard. Windows, uit het vervolgkeuzemenu Omgeving.
- Selecteer de testobjectklasse die u wilt wijzigen, zoals WebEdit of WinButton.
- In de Ordinale identificator Selecteer in dit gedeelte Index, Locatie, Aanmaaktijd of Geen.
- Klik OK en het object opnieuw inleren, zodat de nieuwe rangordewaarde wordt vastgelegd.
- Open de objectrepository, selecteer het object en controleer of de eigenschap 'ordinaal' nu in de beschrijvingslijst verschijnt.
Selecteren Geen Schakelt de fallback voor die klasse volledig uit. UFT Dit leidt dan tot een identificatiefout in plaats van een gok, wat vaak het gewenste gedrag is in een testomgeving waar een stille verkeerde identificatie schadelijker is dan een duidelijke fout. Leg uw verwachtingen vast in een goed geschreven document. testcase maakt die afweging expliciet voor het hele team.
โ ๏ธ Waarschuwing: Het wijzigen van de volgnummer-identifier voor een klasse is een instelling op machineniveau, niet op testniveau. Als deze niet wordt geรซxporteerd en gedeeld, kunnen scripts die op uw machine werken, falen op de machine van een collega of op de buildagent.
Hoe gebruik je rangtelwoorden in Descriptive programmering
Bij beschrijvend programmeren is er geen dialoogvenster voor objectidentificatie. Het volgnummer wordt direct in de beschrijvingsreeks opgenomen, net als elke andere eigenschapsnaam, en is altijd nulgebaseerd.
' Ordinals are zero based: index:=3 is the FOURTH WebEdit on the page Set objPage = Browser("Guru99 Bank").Page("Guru99 Bank") objPage.WebEdit("index:=3").Set "9999999999" Print "Filled WebEdit occurrence #" & (3 + 1) ' Location is counted top to bottom, then left to right objPage.WebButton("location:=1").Click Print "Clicked WebButton occurrence #" & (1 + 1) ' CreationTime works only on Browser objects Print "Switching to browser opened at position #" & (1 + 1) Browser("creationtime:=1").Sync
Output:
Filled WebEdit occurrence #4 Clicked WebButton occurrence #2 Switching to browser opened at position #2
Een veiligere aanpak is om vastgoed te combineren met ChildObjects Het volgnummer wordt dus gevalideerd voordat het wordt gebruikt. Het onderstaande voorbeeld gaat ervan uit dat een pagina vijf overeenkomende WebEdit-objecten bevat met een index van 9.
Dim oDesc, oChildren, intIndex Set oDesc = Description.Create() oDesc("micclass").Value = "WebEdit" oDesc("html tag").Value = "INPUT" Set oChildren = objPage.ChildObjects(oDesc) intIndex = 9 If intIndex < oChildren.Count Then oChildren(intIndex).Set "Guru99" Else Print "Index " & intIndex & " is out of range; only " & oChildren.Count & " objects match" End If
Output:
Index 9 is out of range; only 5 objects match
Deze beveiliging zet een onduidelijke runtimefout "Kan het object niet identificeren" om in een leesbaar bericht, wat belangrijk is wanneer resultaten worden gepubliceerd naar een defectrapport. tracker of naar HP ALM geรฏntegreerd met UFT.
Veelgemaakte fouten bij het gebruik van rangtelwoorden
De meeste afwijkingen die verband houden met rangorde trace terug naar een kleine reeks terugkerende fouten.
- Tellen vanaf 1. Elke ordinale identificator begint bij 0. Het schrijven van index:=1 voor het eerste veld is de meest voorkomende fout en leidt tot een off-by-one fout die op een timingprobleem lijkt.
- Het verwarren van index met locatie. De index volgt de broncode; de โโlocatie volgt het scherm. Op een pagina waar CSS elementen herschikt, verschillen de twee waarden en worden ze verwisseld.ping Ze richten zich stilletjes op de verkeerde controle.
- CreationTime buiten de webomgeving gebruiken. Deze eigenschap bestaat alleen op Browser-objecten. Het toepassen ervan op een Page-, Frame- of Window-object resulteert in een foutmelding dat de eigenschap niet wordt ondersteund.
- Een rangtelwoord hardcoderen in een gedeelde functie. Een herbruikbare functie die ervan uitgaat dat index:=2 is, wordt onbruikbaar zodra een tweede scherm met een andere lay-out deze aanroept.
- De rangtelwoorden in de repository laten staan โโnadat de applicatie stabiel is. Zodra ontwikkelaars stabiele ID's hebben toegevoegd, moeten ze de objecten opnieuw bekijken en het volgnummer vervangen door de nieuwe eigenschap.
- Gebruikmaken van rangtelwoorden binnen lussen over roosters. Verkiezen
ChildObjects, wat een live collectie retourneert, waardoor het aantal de huidige pagina weergeeft in plaats van de opgeslagen pagina.
Informatiebronnen
Download de webpagina's die in de bovenstaande handleiding worden gebruikt om zelf te oefenen.
Ordinale identificatoren vormen slechts een klein onderdeel van het objectidentificatiemodel. Om te zien hoe ze in de bredere workflow passen, ga verder met het volledige model. QTP/UFT trainingsreeks, herhaal de basisprincipes in software testenLeer hoe resultaten worden beheerd in de HP ALM-handleidingen vergelijk lokalisatiestrategieรซn met de Selenium zelfstudie.
Veelgestelde vragen
Klik hier als de video niet toegankelijk is

