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.

  • ๐ŸŽฏ Laatste redmiddel: UFT Voegt alleen een ordinale identificator toe als verplichte en ondersteunende eigenschappen er niet in slagen een beschrijving uniek te maken.
  • ๐Ÿ”ข Inhoudsopgave: Numbers Objecten van dezelfde klasse worden gesorteerd op volgorde in de broncode, beginnend bij 0, dus index:=3 is gericht op de vierde overeenkomst.
  • ๐Ÿ“ Locatie: Numbers Objecten sorteren op schermpositie binnen het venster, kader of dialoogvenster, van boven naar beneden en van links naar rechts.
  • ๐Ÿ•’ Aanmaaktijd: Dit is alleen van toepassing op Browser-objecten en registreert de volgorde waarin elk browserexemplaar is geopend.
  • ๐Ÿ—‚๏ธ Objectidentificatie: Het standaard ordinale type voor elke testobjectklasse kan worden bewerkt onder Extra > Objectidentificatie.
  • โ€‹ Descriptlive programmeren: Geef de index, locatie of aanmaaktijd door als een gewone eigenschap in de objectbeschrijving.
  • โš ๏ธ Breekbaarheid: Rangtelwoorden veranderen telkens wanneer de pagina-indeling wijzigt, dus beschouw ze als een tijdelijke oplossing en nooit als een ontwerpkeuze.

Rangnummer in QTP/UFT uitgelegd met Index, Locatie en Aanmaaktijd

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.

instelling voor ordinale identificatie in de QTP/UFT Venster voor 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:

  1. Indexgebaseerd
  2. Op locatie gebasseerd
  3. 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.

  1. Open UFT en selecteer Hulpmiddelen > Objectidentificatie.
  2. Kies de omgeving, bijvoorbeeld Web of Standaard. Windows, uit het vervolgkeuzemenu Omgeving.
  3. Selecteer de testobjectklasse die u wilt wijzigen, zoals WebEdit of WinButton.
  4. In de Ordinale identificator Selecteer in dit gedeelte Index, Locatie, Aanmaaktijd of Geen.
  5. Klik OK en het object opnieuw inleren, zodat de nieuwe rangordewaarde wordt vastgelegd.
  6. 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

De standaardwaarde verschilt per klasse. De meeste webtestobjecten, zoals WebEdit en WebButton, gebruiken standaard Index, browserobjecten gebruiken standaard CreationTime en Standard. Windows De standaardwaarden voor klassen zijn Locatie. Elke standaardwaarde is zichtbaar en bewerkbaar in het venster Objectidentificatie.

Slimme identificatie wordt als eerste uitgevoerd. UFT Het systeem probeert eerst de geleerde beschrijving, vervolgens Smart Identification als dat is ingeschakeld voor de klasse, en valt alleen terug op de ordinale identifier als beide methoden geen overeenkomend object opleveren.

Ja. Stel in het venster Objectidentificatie de optie 'Ordinale identificatie' in op 'Geen' voor de klasse. UFT Vervolgens meldt het systeem een โ€‹โ€‹identificatiefout in plaats van te gokken, wat veiliger is voor testsuites waar een verkeerde objectklik de testgegevens kan beschadigen.

Licht. UFT Het is noodzakelijk om elk object van de klasse te doorlopen voordat het naar de gevraagde positie kan tellen. Daarom duurt het laden van pagina's met honderden vergelijkbare besturingselementen langer dan bij een beschrijving die is gebaseerd op een unieke naam of ID.

Ja. AI-gebaseerde identificatie wordt momenteel gebruikt. UFT In de eerste versie worden besturingselementen gekoppeld op basis van hun uiterlijk en labeltekst in plaats van hun positie in de opmaak. Hierdoor kan een veld worden gevonden op basis van hoe het eruitziet, zelfs wanneer de omliggende indexwaarden verschuiven.

Een AI-assistent kan een export van een repository scannen, elke beschrijving markeren die index, locatie of aanmaaktijd bevat, en vervangingen voorstellen op basis van de vastgelegde HTML-attributen. Een mens moet elke suggestie echter nog steeds controleren aan de hand van de live applicatie voordat deze wordt doorgevoerd.

Klik hier als de video niet toegankelijk is

Vat dit bericht samen met: