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.
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
- Statikus
- 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.
