Descriptive programozás QTP/UFTDinamikus és statikus

⚡ Okos összefoglaló

Descriptaz ive programozás lehetővé teszi a QTP or UFT Egy utasítás tartalmazza magát az objektumleírást, tulajdonság-érték párokként vagy egy Description objektum, így egy lépés akkor is lefut, ha az objektum soha nem volt tárolva az Object Repository-ban.

  • 🔘 Megkerüli a tárházat: A leírás az utasításon belül halad, így futásidőben nem kell megkeresni az objektumnevet.
  • ☑️ Statikus forma: Tulajdonságérték párok, amelyeket a tesztobjektum hívásán belül „property:=value” formátumban írunk, vesszővel elválasztva.
  • ✅ Dinamikus forma: DescriptAz ion.Create egy újrafelhasználható tulajdonsággyűjteményt hoz létre, amelyet számos utasítás megoszthat.
  • 🧪 Kiszámíthatatlan tárgyakhoz készült: Panelek automatikus elrejtése, változó hierarchiák, beágyazott belső objektumok és ismeretlen méretű eredményhalmazok.
  • 🇧🇷 A ChildObjects párosul vele: A DescriptA szűrőként használt ion objektum csak a szülő egyező gyermekeit adja vissza.
  • 📌 Két szabály, amire emlékezni kell: Minden tulajdonságértéket reguláris kifejezésként kezelünk, és ha egyszer leírunk egy szülőt, akkor a gyermekeit is le kell írnunk.

Statikus és dinamikus leíró programozási utasítások QTP és a UFT egy

Mi a Descriptive programozás?

Descriptive programozás műveletek végrehajtására szolgál az AUT egy olyan objektumán, amelynek definíciója nincs tárolva a ObjektumtárEzzel a mechanizmussal megkerülheti az Object Repository azonosítását, és megadhatja az Object Description magában a nyilatkozatban.

Az objektumnév egyszerűen arra szolgál, hogy egy szkriptben lévő objektumot megfeleltessünk egy objektumtárban található leírásának. Ez azt jelenti, hogy ha mind a szkriptben, mind az objektumtárban megváltoztatjuk az objektumnevet, a szkriptnek továbbra is futnia kell. Nézze meg a következő videót erről a koncepcióról.

Kattints itt ha a videó nem érhető el

Videó Highlights

  • Törölje az objektumot Descriptaz Objektumtárház Ügynöknév WinEdit mezőjének ionját. Ha újra futtatja a tesztet, az sikertelen lesz, mivel nem ismeri fel az objektumot. Vizsgáljuk meg a szkript sikertelenségének okát.
  • Futásidő alatt, UFT Az egyik a WinEdit mezőn végrehajtott műveletet, az objektumot pedig a ... azonosítja. DescriptAz Objektumtárban az ion Ügynöknévként van tárolva. Ezt a nevet használja a következőhöz: track az objektumot az objektumtárban. Egy szülő esetében nem lehet két azonos nevű gyermekobjektum, tehát QTP egyedileg leképezi az objektumot a tárházban. Ezután az Objektumtárban tárolt leírást használja, a nevet a leírással helyettesíti, és a kapott utasítás segítségével azonosítja az objektumot a tesztelt alkalmazásban.
  • Mivel a mi esetünkben ezt az objektumleírást teljesen töröltük, a szkript futása meghiúsul.
  • De mi van, ha ahelyett, hogy QTP az objektumleírás lecserélésekor tesztelőként közvetlenül a szkriptben adod meg az objektumleírásokat? Ez nem más, mint „Descriptive programozás”

Ezt az egyetlen felelősségváltozást valósítja meg az alábbi két űrlap, és mindegyik űrlap más típusú szkripthez illik.

Típusok Descriptive programozás

Használhatja Descriptkétféleképpen lehet programozni

  1. Statikus
  2. Dinamikus

Statikus Descriptive programozás

A Statikus metódusban az objektum azonosításához a következő formátumban adja meg az objektum tulajdonságait

property:=values,

Ezt a formátumot tulajdonság-érték párnak nevezzük, és idézőjelek közé van zárva. Teljes egészében leírva egy statikus utasítás így néz ki:

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

Ha az objektum több leírást használ az azonosításhoz, akkor vesszővel elválasztva adhatja meg azokat.

Így esetünkben az Ügynöknév leírása lesz

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

A statikus leírásokat a rendszer az utasítás futtatásának pontján olvassa be, így ideálisak egyszeri lépésekhez és olyan szkriptek gyors javításához, amelyeket nem kíván újra rögzíteni.

Dinamikus Descriptive programozás

Ugyanennek a műveletnek a második módja a dinamikus Descriptive programozás

Abban az esetben, ha a szkript többször használja a leíró programozási objektum jelöltet, nagyon fárasztó lesz az összes tulajdonságérték pár megadása minden utasításhoz.

Ilyen esetekben igénybe veheti a Descriptionosztály, amelyet a QTP

A leíró objektum létrehozásának szintaxisa a következő:

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

Ez a dinamikus módszer

Ha kitöltjük az objektumot a fent használt Agent Name tulajdonságokkal, akkor egy teljes, újrafelhasználható leírást kapunk:

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

A változó oLeírás mostantól bármely olyan utasításnak átadható, amelyhez szükség van az objektumra, így egyetlen szerkesztés frissíti az összes lépést, amely használja azt.

Statikus vs. dinamikus Descriptive programozás: Mikor használjuk az egyes módszereket

Mindkét forma ugyanazt a futásidejű leírást állítja elő, így a választás inkább a karbantartásra, mint a képességre vonatkozik.

Kritériumai Statikus (beágyazott) Dinamikus (Description objektum)
Hogyan íródott a leírás A tesztobjektum hívásában beírt tulajdonság-érték párok Tulajdonságok hozzáadva egy létrehozott objektumhoz Description.Create()
újrafelhasználás Minden olyan utasításban ismétlődik, amelyhez szükség van az objektumra Egy változóban tárolva, és bárhol átadva, ahol szükséges
olvashatóság A rövid mondatok olvashatók maradnak; a hosszúak nehézkessé válnak Extra beállítási sorok, de maga az utasítás rövid marad
Futásidejű változások Az értékek rögzítettek, kivéve, ha változókból összefűzve vannak. A tulajdonságértékek minden használat előtt újra hozzárendelhetők
Működik a ChildObjects-szel Nem, a szűrő argumentumnak egynek kell lennie Descriptionobjektum Igen, ez a kötelező űrlap
A legalkalmasabb Egy vagy két lépés egy olyan objektumon, amely nem található meg a tárházban Ismételten használt objektumok, vagy futásidőben lekért gyűjtemények

Miért használja Descriptive programozás?

Az alábbi átirat egy valós forgatókönyvet bemutató videós bemutatót tartalmaz, ahol az objektumok száma nem ismert előre.

Videó átirat

  • A millió dolláros kérdés az, hogy miért használjunk DP-t, amikor az objektumazonosítási folyamatot egy másik kezeli. QTP
  • Tegyük fel, hogy egy állásportál tesztelésével bíztak meg. Beír egy keresési lekérdezést a portálon, és a teszt azt várja el, hogy kiválassza az összes elérhető állást, majd rákattintson az Állás jelentkezése gombra.
  • De a megjelenített feladatok száma a keresési lekérdezéstől és a szkript végrehajtása idején elérhető feladatoktól függ, és nincs mód előre megjósolni a megjelenített feladatok számát.
  • Ilyen esetekben leíró programozást használhat. Annak ellenére, hogy nem ismeri a jelölőnégyzetek számát és nevét, ismeri az objektumok osztályát, mint „WebCheck”Box"
  • Használhatja a ChildObjects metódus adott szülőhöz tartozó objektumok visszaadására
  • Egy kódsor, mint például
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    visszaadja az oldal összes gyermekobjektumát.

  • De mi csak a WebChecket akarjukBox objektumok. Ehhez létrehozhatunk egy szűrőobjektumot, és beállíthatjuk a tulajdonságát a web jelölőnégyzet osztályra, majd ezt a szűrőt argumentumként átadhatjuk a ChildObjects metódusnak.
  • Ebben az esetben csak a jelölőnégyzetek jelennek meg.
  • Ezután írhatsz ehhez hasonló kódot, amely a nulláról indulva hozzáfér a teljes jelölőnégyzet-gyűjteményhez, és az összes jelölőnégyzetet BE (ON) állapotba állítja.
  • Ezután kattintson az Alkalmaz gombra a teszt befejezéséhez
  • Ön is használja Descriptive Programozás nehezen rögzíthető objektumok futtatására, például panelek automatikus elrejtése, változó hierarchiával rendelkező objektumok, egymásba ágyazott belső objektumok, almenük.
  • Speciális karakterlánc-manipulációkat is végezhet leíró programozás segítségével
  • Az index tulajdonsággal együtt a leíró programozás nagyon hasznos lehet a nehéz objektumok azonosításában.
  • Ha egy objektumhierarchiában lévő objektumhoz programozott leírást használ, akkor a következő gyermekobjektumokhoz leíró programozást kell használnia.
  • Például, ha a Page objektumhoz leíró programozást használtak, de a következő gyermek WinEdit objektum az Object Repository-ból származik, az utasítás helytelen.
  • Ezzel szemben, ha mind a Page, mind a WinEdit objektumokhoz leíró programozást használunk, az állítás helyes.

Leírva a szűrő és a ciklus leírása így néz ki:

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

A gyűjtemény nulla alapú, ezért a ciklus itt áll meg: Szám – 1Mivel a szűrő kiértékelésre kerül a sor futtatásakor, ugyanaz a kód működik, függetlenül attól, hogy a keresés három vagy harminc feladatot ad vissza.

Reguláris kifejezések, sorszámazonosítók és gyakori buktatók

DescriptAz ive programozás kétféleképpen viselkedik, ami a legtöbb embert meglepi, amikor egy utasítás először látható ok nélkül meghiúsul.

1) Minden tulajdonságértéket reguláris kifejezésként kezelünk. Egy felirat, mint például Összesen (USD) ezért nem egyezik, mert a zárójelek reguláris kifejezés szintaxisát alkotják. Ehelyett használjunk perjelet, vagy kapcsoljuk ki a reguláris kifejezés kiértékelését az adott tulajdonsághoz egy Description objektum:

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

2) A sorszámazonosítók döntetleneket oldanak fel. Ha egy leírás továbbra is több objektumnak felel meg, add hozzá index, elhelyezkedés or létrehozási idő extra tulajdonságként. Az indexek számlálása nullától kezdődik:

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

Három további buktatót érdemes ellenőrizni, mielőtt elkezdenéd a hibakeresést az alkalmazásban:

  • Felhasználás mikroosztály, nem a címke Osztály név látható az Object Spy-ban. A megjelenített név nem érvényes tulajdonság a leírásban.
  • A tulajdonságnevek nem megkülönböztetik a kis- és nagybetűket, de pontosan úgy kell írni őket, ahogyan a technológia jelenti őket, beleértve a szóközöket is. csatolt szöveg és a html-címke.
  • DescriptAz ive programozás megkerüli a lerakatot; nem javítja az objektumfelismerést. Ha a megfelelő bővítmény nincs betöltve, akkor a leírás hiányában az objektum azonosíthatóvá válik.

GYIK

pont Object Spy a vezérlőn, és olvassa ki az azonosító tulajdonságait, vagy hívja meg a GetROProperty függvényt futásidőben. Másolja a neveket pontosan a listában szereplő módon, ne feledkezzen meg arról, hogy az Object Spy a micclass értéket jeleníti meg az Osztálynév címke alatt.

Általában nem. A repository keresés egyszer oldja fel a tárolt leírást, míg a described utasítás minden alkalommal kiértékelődik, amikor a sor fut. A leíró programozás előnye a rugalmasság a kiszámíthatatlan objektumokon, nem pedig a nyers sebesség.

Építsd a Description objektumot egy újrafelhasználható függvényen belül, és ezt a függvényt egy vbscript a teszthez társított függvénykönyvtár. Minden művelet, amely betölti a függvénykönyvtárat, meghívhatja azt, így egyetlen szerkesztés frissíti az összes hívót.

A mesterséges intelligencia által támogatott azonosítás a vezérlőket vizuális megjelenés és a közeli címkeszöveg alapján párosítja a rögzített tulajdonságok helyett, ami eltávolít néhány kézzel írott leírást. DescriptAz ionokra továbbra is szükség van ott, ahol az objektumokat futási időben számolják vagy szűrik.

A másodpilóta képes a hurkok állványozására, Description.Hívásokat és jelentéseket hoz létre egy leírás alapján, de nem látja az alkalmazásodat. Minden általa javasolt tulajdonságnevet és értéket meg kell erősíteni a valódi vezérlővel szemben, mielőtt az utasítás megbízhatónak minősülne.

Ritkán. Egy megosztott objektumtár A leírásokat egy szerkeszthető helyen tartja, és a szkripteket olvashatóvá teszi. A legtöbb csapat stabil képernyőket tart a tárházban, és csak akkor nyúl a leírásokhoz, ha az objektumok dinamikusak.

Csökkentsd egyetlen tulajdonságra, majd add hozzá a többit egyenként. Az objektumszám ChildObjects szűrővel történő ellenőrzése megmutatja, hogy a leírás semmivel sem egyezik-e, vagy több objektummal is kétértelműen egyezik-e.

Igen. Bármely technológiával működik, amelynek a bővítménye be van töltve, beleértve a szabványos Windows, web, .NET, Java és terminálemulátor objektumok. Csak a tulajdonságnevek különböznek, mivel minden bővítmény a saját azonosító tulajdonságait jelenti.

Foglald össze ezt a bejegyzést a következőképpen: