Ordinal identifierare i QTP/UFTExempel på objektidentifiering

⚡ Smart sammanfattning

Ordinal identifierare i QTP/UFT är tiebreakern UFT gäller när obligatoriska och hjälpmedelsegenskaper fortfarande matchar mer än ett objekt, med hjälp av värden för Index, Location eller CreationTime för att välja ett enda unikt objekt.

  • 🎯 Sista utvägen: UFT lägger endast till en ordinalidentifierare efter att obligatoriska och hjälpmedelsegenskaper inte lyckats göra en beskrivning unik.
  • 🔢 Index: Numbers objekt av samma klass efter källkodsordning, med början vid 0, så index:=3 riktar sig mot den fjärde matchningen.
  • 📍 Plats: Numbers objekt efter skärmposition inuti fönstret, ramen eller dialogrutan, uppifrån och ned och från vänster till höger.
  • 🕒 Skapandetid: Gäller endast för webbläsarobjekt och registrerar den ordning i vilken varje webbläsarinstans öppnades.
  • 🗂️ Objektidentifiering: Standardordinaltypen för varje testobjektklass kan redigeras under Verktyg > Objektidentifiering.
  • ⌨️ Descriptfem programmering: Skicka index, location eller creationtime som en vanlig egenskap inuti objektbeskrivningssträngen.
  • ⚠️ Bräcklighet: Ordinalvärden ändras när sidlayouten ändras, så behandla dem som en tillfällig lösning, aldrig ett designval.

Ordinal identifierare i QTP/UFT förklarat med Index, Plats och Skapadstid

Vad är en ordinal identifierare i QTP/UFT?

An Ordinalidentifierare är en numerisk egenskap som UFT (förr QTP) lägger till i en objektbeskrivning när de obligatoriska och hjälpmedelsegenskaper som registrerats under en inspelningssession inte räcker för att identifiera objektet unikt. Istället för att misslyckas använder verktyget en räknare som i praktiken säger "ta det tredje objektet i den här klassen".

Som standard finns det en ordinalidentifierartyp för varje testobjektklass. En WebEdit numreras annorlunda än en WinButton, och en Browser numreras också annorlunda. Du kan visa eller ändra standardordinalidentifieraren för en klass i fönstret Objektidentifiering.

Inställning av ordinalidentifierare i QTP/UFT Fönster för objektidentifiering

Som skärmdumpen ovan visar finns rullgardinsmenyn Ordinalidentifierare längst ner i dialogrutan Objektidentifiering, under listorna över obligatoriska egenskaper och hjälpegenskaper. Den positionen är inte av en slump: den speglar den ordning i vilken UFT konsulterar faktiskt de tre grupperna.

Det finns tre typer av ordinala identifierare i UFT:

  1. Indexbaserat
  2. Platsbaserad
  3. Skapningstid

Varför UFT Använder endast ordinära identifierare som en sista utväg

Objektidentifiering i UFT körs som en kaskad. Obligatoriska egenskaper lärs in först. Om de inte ger en enda matchning läggs hjälpegenskaper till en efter en tills beskrivningen är unik. Endast när båda grupperna är uttömda görs UFT bifoga en ordinalidentifierare, och vid körning konsulteras den smarta identifieringsmekanismen innan ordinalvärdet litas på.

Anledningen till den rankningen är stabilitet. Obligatoriska och hjälpmedelsegenskaper beskriver vad ett objekt är: dess namn, dess HTML-tagg, dess typ, dess etikett. En ordinal identifierare beskriver endast var objektet råkade sitta vid inspelningstillfället. Allt som ändrar sidan ändrar numret:

  • En utvecklare infogar ett dolt fält ovanför det du automatiserar.
  • En reklambanner lägger till två extra länkar i rubriken.
  • En responsiv layout omformulerar formuläret från två kolumner till en.
  • En popup-webbläsare öppnas tidigare än under den inspelade körningen.

Inga av dessa ändringar bryter mot en beskrivning som bygger på ett namn eller ett ID, utan var och en ändrar tyst varje index- och platsvärde på sidan. Det är därför erfarna ingenjörer behandlar en ordinal identifierare som en signal om att objektbeskrivningen behöver åtgärdas, inte som en färdig lösning. Samma princip gäller för alla automatiseringstestning ramverk i allmänhet, inklusive lokaliseringsstrategi i Selenium.

💡 Tips: Innan du accepterar en ordinalidentifierare, öppna objektet i Object Spy och leta efter ett stabilt anpassat attribut. Att lägga till det attributet i listan över hjälpegenskaper för klassen tar ofta bort behovet av en ordinal på varje framtida objekt av den typen.

Typer av ordinala identifierare i UFT/QTP

Indexbaserat

  • När en indexbaserad ordinalidentifierare används, UFT tilldelar ett värde till index objektets egenskap under inspelning.
  • Värdet baseras på den ordning i vilken objektet visas i källkoden, inte på skärmen.
  • Den första förekomsten har värdet 0.
  • Indexegenskapsvärden är objektspecifika, så varje testobjektklass räknas separat.
  • Om du använder index:=3 för att beskriva ett WebEdit-testobjekt, UFT söker efter det fjärde WebEdit-objektet på sidan.
  • På samma sätt, om du använder index:=1 för att beskriva ett WebButton-testobjekt, UFT söker efter det andra WebButton-objektet på sidan.

Platsbaserad

  • När en platsbaserad ordinalidentifierare används, UFT tilldelar ett värde till läge egenskap hos objektet för att identifiera det unikt.
  • Värdet baseras på den ordning i vilken objektet visas i fönstret, ramen eller dialogrutan, i förhållande till andra objekt med identiska egenskaper.
  • Den första förekomsten av objektet är 0.
  • Värden tilldelas i kolumner, från topp till botten och sedan från vänster till höger.
  • Plats är standard ordinalidentifieraren för de flesta standardinställningar. Windows testobjektklasser, där visuell layout är mer stabil än markupordning.

Skapningstid

  • När ordningsidentifieraren för skapandetid används, UFT tilldelar ett värde till skapelsetid egenskapen för ett webbläsarobjekt.
  • Denna identifierare är endast tillgänglig för webbmiljön och endast för webbläsartestobjekt.
  • Värdet anger i vilken ordning webbläsaren öppnades i förhållande till andra öppna webbläsare.
  • Den första webbläsaren som öppnas under körningen får creationtime:=0, och efterföljande webbläsare får 1, 2, 3 och så vidare.
  • Om en webbläsare stängs behåller de återstående webbläsarna sina ursprungliga värden istället för att omnumreras.

Index kontra Plats kontra Skapad tid: Jämförelsetabell

De tre identifierarna besvarar tre olika frågor, och att välja fel är en vanlig orsak till återkommande fel.

Aspect index Plats Skapandetid
Egendomsnamn index läge skapelsetid
Beställningsgrund Ordning i källkoden/objekthierarkin Skärmposition inuti fönstret, ramen eller dialogrutan Ordning i vilken webbläsarinstanser öppnades
Räkneregel Sekventiell, per testobjektklass Kolumner, uppifrån och ned, sedan från vänster till höger Sekventiell, per webbläsarinstans
Första värdet 0 0 0
Gäller för Webb och Windows klasser Huvudsakligen standard Windows klasser Endast webbläsarobjekt
Bryter när Ändringar av markeringsordning Layouten har flyttats eller ändrats i storlek Windows öppna i en annan ordning
Används bäst till Upprepade rutnäts- eller tabellkontroller Äldre skrivbordsformulär med fast layout Webbflöden med flera fönster, till exempel popup-fönster för betalningar

Så här ställer du in ordinalidentifieraren i objektförrådet

Ordinalidentifieraren konfigureras per testobjektklass och tillämpas automatiskt på varje objekt i den klassen som UFT lär sig efteråt. Befintliga objekt som redan finns i arkivet uppdateras inte retroaktivt.

  1. Öppet UFT och välj Verktyg > Objektidentifiering.
  2. Välj miljö, till exempel Webb eller Standard Windows, från rullgardinsmenyn Miljö.
  3. Välj den testobjektklass du vill ändra, till exempel WebEdit eller WinButton.
  4. I Ordinal identifierare avsnittet, välj Index, Plats, Skapadstid eller Ingen.
  5. Klicka OK och lära in objektet på nytt så att det nya ordinalvärdet registreras.
  6. Öppna objektarkivet, markera objektet och bekräfta att ordinalegenskapen nu visas i beskrivningslistan.

Välja Ingen inaktiverar reservfunktionen för den klassen helt. UFT kommer då att orsaka ett identifieringsfel snarare än en gissning, vilket ofta är det beteende man vill ha i en svit där tyst felidentifiering är mer skadlig än ett rent misslyckande. Registrera dina förväntningar i en välskriven testfall gör den avvägningen tydlig för hela teamet.

⚠️ Varning: Att ändra ordinalidentifieraren för en klass är en inställning på maskinnivå, inte en på testnivå. Om den inte exporteras och delas kan skript som skickas på din maskin misslyckas på en kollegas maskin eller på byggagenten.

Hur man använder ordinala identifierare i Descriptive programmering

I beskrivande programmering finns ingen dialogruta för objektidentifiering. Ordinalen skrivs direkt in i beskrivningssträngen, precis som alla andra egenskapsnamn, och den är alltid nollbaserad.

' 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

Produktion:

Filled WebEdit occurrence #4
Clicked WebButton occurrence #2
Switching to browser opened at position #2

Ett säkrare mönster är att kombinera fastigheter med ChildObjects så ordinalen valideras innan den används. Exemplet nedan förutsätter en sida som innehåller fem matchande WebEdit-objekt och ett index 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

Produktion:

Index 9 is out of range; only 5 objects match

Denna skyddsfunktion förvandlar ett ohjälpsamt körtidsfelmeddelande av typen "Kan inte identifiera objektet" till ett läsbart meddelande, vilket är viktigt när resultat publiceras till en defekt. tracker eller till HP ALM integrerat med UFT.

Vanliga misstag vid användning av ordinala identifierare

De flesta ordinalrelaterade defekter trace tillbaka till en liten uppsättning återkommande fel.

  • Räknar från 1. Varje ordinalidentifierare börjar på 0. Att skriva index:=1 för det första fältet är det vanligaste misstaget och producerar ett fel som ser ut som ett timingproblem.
  • Förvirrande index med plats. Index följer källkoden; plats följer skärmen. På en sida där CSS omordnar elementen skiljer sig de två värdena åt och de växlarping de riktar sig i tysthet mot fel kontroll.
  • Använda CreationTime utanför webbmiljön. Egenskapen finns bara på webbläsarobjekt. Om den tillämpas på ett sid-, ram- eller fönsterobjekt genereras ett felmeddelande om en egenskap som inte stöds.
  • Hårdkodning av en ordinal till en delad funktion. En återanvändbar funktion som antar index:=2 blir oanvändbar i det ögonblick en andra skärm med en annan layout anropar den.
  • Lämna ordinaler i arkivet efter att applikationen stabiliserats. När utvecklare har lagt till stabila ID:n, besök objekten igen och ersätt ordinalen med den nya egenskapen.
  • Att förlita sig på ordinaler inuti loopar framför rutnät. Föredra ChildObjects, vilket returnerar en aktiv samling, så att antalet återspeglar den aktuella sidan snarare än den inspelade.

Resurser

Ladda ner webbsidorna som används i handledningen ovan för självövning

Ordinalidentifierare är en liten del av objektidentifieringsmodellen. För att se hur de passar in i det bredare arbetsflödet, fortsätt med den fullständiga QTP/UFT träningsserie, granska grunderna i mjukvarutestning, lär dig hur resultat hanteras i HP ALM-handledningoch jämför lokaliseringsstrategier med Selenium handledning.

Vanliga frågor

Standardvärdet varierar beroende på klass. De flesta webbtestobjekt som WebEdit och WebButton har Index som standard, Browser-objekt har CreationTime som standard och Standard Windows Standardinställningen för klasser är Plats. Varje standardinställning är synlig och kan redigeras i fönstret Objektidentifiering.

Smart identifiering körs först. UFT försöker den inlärda beskrivningen, sedan Smart Identification om den är aktiverad för klassen, och återgår bara till ordinalidentifieraren när båda misslyckas med att producera ett enda matchande objekt.

Ja. Ställ in rullgardinsmenyn Ordinalidentifierare till Ingen för klassen i fönstret Objektidentifiering. UFT rapporterar sedan ett identifieringsfel istället för att gissa, vilket är säkrare för sviter där ett klick på fel objekt kan skada testdata.

Lite. UFT måste räkna upp varje objekt i klassen innan den kan räknas till den begärda positionen, så sidor med hundratals liknande kontroller tar längre tid att lösa än en beskrivning byggd på ett unikt namn eller ID.

Ja. AI-baserad identifiering i nuvarande UFT Man matchar kontroller efter utseende och etiketttext snarare än markupposition, så att ett fält kan lokaliseras efter hur det ser ut även när de omgivande indexvärdena ändras.

En AI-assistent kan skanna en export av ett arkiv, flagga varje beskrivning som innehåller index, plats eller skapandetid och föreslå ersättningar från de insamlade HTML-attributen. En människa måste fortfarande verifiera varje förslag mot den aktiva applikationen innan den bekräftas.

Klicka här. om videon inte är tillgänglig

Sammanfatta detta inlägg med: