Ordinal identifikator i QTP/UFTEksempel på objektidentifikation
⚡ Smart opsummering
Ordinal identifikator i QTP/UFT er tiebreakeren UFT gælder, når obligatoriske og hjælpeegenskaber stadig matcher mere end ét objekt, ved hjælp af indeks-, placerings- eller oprettelsestidsværdier til at vælge et enkelt unikt objekt.

Hvad er en ordinal identifikator i QTP/UFT?
An Ordinær identifikator er en numerisk egenskab, der UFT (tidligere QTP) tilføjer til en objektbeskrivelse, når de obligatoriske og assisterende egenskaber, der registreres under en optagelsessession, ikke er nok til at identificere objektet entydigt. I stedet for at fejle, bruger værktøjet en tæller, der i realiteten siger "tag det tredje objekt i denne klasse".
Som standard findes der en ordinal identifikatortype for hver testobjektklasse. En WebEdit er nummereret forskelligt fra en WinButton, og en Browser er nummereret forskelligt igen. Du kan se eller ændre standard ordinal identifikatoren for en klasse i vinduet Objektidentifikation.
Som skærmbilledet ovenfor viser, er rullemenuen Ordinal identifikator placeret nederst i dialogboksen Objektidentifikation, under listerne over obligatoriske og hjælpeegenskaber. Denne placering er ikke tilfældig: den afspejler den rækkefølge, i hvilken UFT konsulterer faktisk de tre grupper.
Der er tre typer ordinale identifikatorer i UFT:
- Indeks baseret
- Placering baseret
- Oprettelsestid
Hvorfor UFT Bruger kun ordinære identifikatorer som en sidste udvej
Objektidentifikation i UFT kører som en kaskade. Obligatoriske egenskaber læres først. Hvis de ikke giver et eneste match, tilføjes hjælpeegenskaber én efter én, indtil beskrivelsen er unik. Først når begge grupper er opbrugt, UFT tilknytte en ordinalidentifikator, og under kørsel konsulteres Smart Identification-mekanismen, før ordinalværdien er tillidsfuld.
Årsagen til denne rangering er stabilitet. Obligatoriske og hjælpemæssige egenskaber beskriver det et objekt er: dets navn, dets HTML-tag, dets type, dets label. En ordinal identifikator beskriver kun hvor Objektet lå tilfældigvis på det tidspunkt, hvor optagelsen fandt sted. Alt, der ændrer siden, ændrer tallet:
- En udvikler indsætter et skjult felt oven over det, du automatiserer.
- Et reklamebanner tilføjer to ekstra links til headeren.
- Et responsivt layout ombryder formularen fra to kolonner til én.
- En pop op-browser åbnes tidligere end under den optagede kørsel.
Ingen af disse ændringer ødelægger en beskrivelse, der er bygget på et navn eller et ID, men hver enkelt ændrer lydløst alle indeks- og placeringsværdier på siden. Derfor behandler erfarne ingeniører en ordinal identifikator som et signal om, at objektbeskrivelsen skal arbejdes med, ikke som en færdig løsning. Det samme princip gælder på tværs af automatiseringstest rammer generelt, herunder lokaliseringsstrategi i Selenium.
💡 Tip: Før du accepterer en ordinal identifikator, skal du åbne objektet i Object Spy og søge efter en stabil brugerdefineret attribut. Tilføjelse af denne attribut til listen over hjælpeegenskaber for klassen fjerner ofte behovet for en ordinal på alle fremtidige objekter af den type.
Typer af ordinale identifikatorer i UFT/QTP
Indeks baseret
- Når en indeksbaseret ordinalidentifikator anvendes, UFT tildeler en værdi til indeks objektets egenskab under optagelse.
- Værdien er baseret på den rækkefølge, hvori objektet vises i kildekoden, ikke på skærmen.
- Den første forekomst har værdien 0.
- Indeksegenskabsværdier er objektspecifikke, så hver testobjektklasse tælles separat.
- Hvis du derfor bruger index:=3 til at beskrive et WebEdit-testobjekt, UFT søger efter det fjerde WebEdit-objekt på siden.
- Ligeledes, hvis du bruger index:=1 til at beskrive et WebButton-testobjekt, UFT søger efter det andet WebButton-objekt på siden.
Placeringsbaseret
- Når der anvendes en lokationsbaseret ordinalidentifikator, UFT tildeler en værdi til placering egenskab ved objektet for at identificere det entydigt.
- Værdien er baseret på den rækkefølge, objektet vises i i vinduet, rammen eller dialogboksen i forhold til andre objekter med identiske egenskaber.
- Den første forekomst af objektet er 0.
- Værdier tildeles i kolonner, fra top til bund og derefter fra venstre mod højre.
- Placering er standard ordinalidentifikator for de fleste standardindstillinger. Windows testobjektklasser, hvor visuelt layout er mere stabilt end markup-rækkefølge.
Oprettelsestid
- Når ordinalidentifikatoren for oprettelsestidspunktet bruges, UFT tildeler en værdi til skabelsestid egenskaben for et browserobjekt.
- Denne identifikator er kun tilgængelig for webmiljøet og kun for browsertestobjekter.
- Værdien angiver den rækkefølge, hvori browseren blev åbnet i forhold til andre åbne browsere.
- Den første browser, der åbnes under kørslen, modtager creationtime:=0, og efterfølgende browsere modtager 1, 2, 3 osv.
- Hvis en browser lukkes, beholder de resterende browsere deres oprindelige værdier i stedet for at blive omnummereret.
Indeks vs. placering vs. oprettelsestidspunkt: Sammenligningstabel
De tre identifikatorer besvarer tre forskellige spørgsmål, og at vælge den forkerte er en hyppig årsag til periodiske fejl.
| Aspect | Indeks | Lokation | Oprettelsestid |
|---|---|---|---|
| Ejendomsnavn | indeks | placering | skabelsestid |
| Bestillingsgrundlag | Rækkefølge i kildekoden/objekthierarkiet | Skærmplacering i vinduet, rammen eller dialogboksen | Rækkefølge, i hvilken browserforekomster åbnede |
| Tælleregel | Sekventiel, pr. testobjektklasse | Kolonner, top til bund og derefter venstre til højre | Sekventiel, pr. browserinstans |
| Første værdi | 0 | 0 | 0 |
| Gælder | Web og Windows klasser | Primært standard Windows klasser | Kun browserobjekter |
| Pauser når | Ændringer i markup-rækkefølgen | Layoutet er flyttet eller skaleret | Windows åbnes i en anden rækkefølge |
| Bedste brugt til | Gentagne gitter- eller tabelkontroller | Ældre desktopformularer med fast layout | Webflows med flere vinduer, såsom pop op-vinduer til betalinger |
Sådan indstiller du ordinalidentifikatoren i objektarkivet
Ordinalidentifikatoren konfigureres pr. testobjektklasse, og den anvendes automatisk på alle objekter i den pågældende klasse, der UFT lærer bagefter. Eksisterende objekter, der allerede er i arkivet, opdateres ikke med tilbagevirkende kraft.
- Åbne UFT og vælg Værktøjer > Objektidentifikation.
- Vælg miljøet, for eksempel Web eller Standard Windows, fra rullemenuen Miljø.
- Vælg den testobjektklasse, du vil ændre, f.eks. WebEdit eller WinButton.
- I Ordinal identifikator skal du vælge Indeks, Placering, Oprettelsestidspunkt eller Ingen.
- Klik OK og genindlær objektet, så den nye ordinalværdi registreres.
- Åbn objektarkivet, vælg objektet, og bekræft, at ordinalegenskaben nu vises i beskrivelseslisten.
Valg Ingen deaktiverer fallback-funktionen for den pågældende klasse helt. UFT vil så give anledning til en identifikationsfejl snarere end et gæt, hvilket ofte er den ønskede adfærd i en suite, hvor tavs fejlidentifikation er mere skadelig end en ren fiasko. Registrer dine forventninger i en velskrevet test sag gør denne afvejning eksplicit for hele holdet.
⚠️ Advarsel: Ændring af ordinalidentifikatoren for en klasse er en indstilling på maskinniveau, ikke en på testniveau. Hvis den ikke eksporteres og deles, kan scripts, der sendes på din maskine, fejle på en kollegas maskine eller på build-agenten.
Sådan bruger du ordinære identifikatorer i Descriptive programmering
I beskrivende programmering er der ingen dialogboks til objektidentifikation. Ordinalet skrives direkte ind i beskrivelsesstrengen, præcis som ethvert andet egenskabsnavn, og det er altid nulbaseret.
' 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
Et sikrere mønster er at kombinere faste ejendomme med ChildObjects så ordinalen valideres, før den bruges. Eksemplet nedenfor antager en side, der indeholder fem matchende WebEdit-objekter og et indeks på 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
Denne vagt forvandler en uhensigtsmæssig "Kan ikke identificere objektet" runtime-fejl til en læsbar besked, hvilket er vigtigt, når resultater publiceres til en defekt tracker eller til HP ALM integreret med UFT.
Almindelige fejl ved brug af ordinære identifikatorer
De fleste ordinalrelaterede defekter tractilbage til et lille sæt af tilbagevendende fejl.
- Tæller fra 1. Hver ordinal identifikator starter ved 0. At skrive index:=1 for det første felt er den mest almindelige fejl og producerer en fejl, der ligner et timingproblem.
- Forvirrende indeks med placering. Indeks følger kildekoden; placering følger skærmen. På en side, hvor CSS omarrangerer elementer, er de to værdier forskellige, og de bytter om.ping de målretter lydløst den forkerte kontrol.
- Brug af CreationTime uden for webmiljøet. Egenskaben findes kun på browserobjekter. Anvendelse af den på et side-, ramme- eller vinduesobjekt udløser en fejl af typen "ikke-understøttet egenskab".
- Hårdkodning af en ordinalfunktion til en delt funktion. En genbrugelig funktion, der antager index:=2, bliver ubrugelig i det øjeblik, en anden skærm med et andet layout kalder den.
- Efterlader ordinaler i arkivet, efter applikationen stabiliserer sig. Når udviklere tilføjer stabile ID'er, skal du besøge objekterne igen og erstatte ordinalen med den nye egenskab.
- Afhængighed af ordinaler i løkker frem for gitre. Foretrække
ChildObjects, som returnerer en live-samling, så antallet afspejler den aktuelle side i stedet for den optagede.
Ressourcer
Download websiderne brugt i ovenstående vejledning til selvøvelse
Ordinale identifikatorer er en lille del af objektidentifikationsmodellen. For at se, hvordan de passer ind i den bredere arbejdsgang, fortsæt med den fulde QTP/UFT træningsserie, gennemgå det grundlæggende i software test, lær hvordan resultater styres i HP ALM-vejledningog sammenlign lokaliseringsstrategier med Selenium tutorial.
Ofte Stillede Spørgsmål
Klik link. hvis videoen ikke er tilgængelig

