Descriptživé programování v QTP/UFTDynamické a statické

⚡ Chytré shrnutí

Descriptživé programování umožňuje QTP or UFT Jeden příkaz obsahuje samotný popis objektu, jako páry hodnot vlastností nebo jako Description objektu, takže krok se spustí, i když objekt nebyl nikdy uložen v úložišti objektů.

  • 🔘 Obchází repozitář: Popis se přenáší uvnitř příkazu, takže za běhu není nutné vyhledávat žádný název objektu.
  • ☑️ Statický formulář: Páry hodnot vlastností zapsané přímo jako „vlastnost:=hodnota“, oddělené čárkami uvnitř volání testovacího objektu.
  • (Tj. Dynamický formulář: Description.Create vytváří opakovaně použitelnou kolekci vlastností, kterou může sdílet mnoho příkazů.
  • 🧪 Vytvořeno pro nepředvídatelné objekty: Automatické skrytí panelů, změna hierarchií, vnořené vnitřní objekty a sady výsledků neznámé velikosti.
  • 🛠️ ChildObjects se s ním páruje: A DescriptObjekt ion použitý jako filtr vrací pouze odpovídající potomky rodiče.
  • 📌 Dvě pravidla, která je třeba si zapamatovat: Každá hodnota vlastnosti je považována za regulární výraz a jakmile popíšete rodičovskou položku, musíte popsat i její potomky.

Statické a dynamické popisné programovací příkazy v QTP a UFT Jedna

Co je to Descriptive Programování?

Descriptprogramování se používá k provádění operací na objektu v AUT, jehož definice není uložena v Úložiště objektůPomocí tohoto mechanismu můžete obejít identifikaci z úložiště objektů a poskytnout objekt Description v samotném prohlášení.

Název objektu se jednoduše používá k mapování objektu ve skriptu s jeho popisem v repozitáři objektů. To znamená, že pokud změníte název objektu ve skriptu i v repozitáři objektů, skript by se měl stále spustit. Podívejte se na následující video o tomto konceptu.

klikněte zde pokud video není přístupné

Video Highlights

  • Smazat objekt Descriptpole Název agenta ve WinEdit z úložiště objektů. Pokud test spustíte znovu, selže, protože skript nedokáže objekt rozpoznat. Podívejme se na důvod, proč skript selhává.
  • Během běhu, UFT Jeden identifikuje operaci, která se provádí v poli WinEdit, a objekt DescriptNázev v úložišti objektů je uložen jako název agenta. Tento název se používá k track objektu v repozitáři objektů. Pro rodičovský objekt nemůžete mít dva podřízené objekty se stejným názvem, takže QTP jedinečně mapuje objekt v repozitáři. Poté použije uložený popis v repozitáři objektů, nahradí název popisem a výsledný příkaz použije k identifikaci objektu v testované aplikaci.
  • Protože jsme v našem případě tento popis objektu zcela smazali, skript selže.
  • Ale co když místo QTP nahrazujete popis objektu, vy jako tester přímo specifikujete popisy objektů ve svém skriptu? To není nic jiného než „DescriptŽivé programování”

Tuto jedinou změnu odpovědnosti implementují dva níže uvedené formuláře a každý z nich je vhodný pro jiný typ skriptu.

Druhy Descriptive Programování

Můžeš použít Descriptprogramovat dvěma způsoby

  1. statický
  2. Dynamický

statický Descriptive Programování

Ve statické metodě zadáte pro identifikaci objektu vlastnost objektu v následujícím formátu

property:=values,

Tento formát se nazývá pár hodnot vlastnosti a je uzavřen v uvozovkách. V plném znění vypadá statický příkaz takto:

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

Pokud váš objekt používá k identifikaci více popisů, můžete je specifikovat pomocí čárek.

Takže v našem případě se stane popis pro jméno agenta

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

Statické popisy se čtou v okamžiku spuštění příkazu, což je ideální pro jednorázové kroky a rychlé opravy skriptu, který nechcete znovu nahrávat.

Dynamický Descriptive Programování

Druhým způsobem provedení stejné akce je použití Dynamic Descriptprogramování

V případě, že váš skript používá kandidáta popisného programovacího objektu vícekrát, bude velmi únavné specifikovat všechny dvojice hodnot vlastnosti pro každý příkaz

V takových případech můžete využít DescriptTřída iontů poskytovaná společností QTP

Syntaxe pro vytvoření objektu popisu je

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

Toto je dynamická metoda

Vyplnění tohoto objektu výše uvedenými vlastnostmi názvu agenta poskytne kompletní a opakovaně použitelný popis:

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

Proměnná Popis lze nyní předat libovolnému příkazu, který daný objekt potřebuje, takže jedna úprava aktualizuje každý krok, který jej používá.

Statický vs. dynamický DescriptŽivé programování: Kdy který použít

Oba formuláře produkují stejný popis za běhu, takže volba se týká spíše údržby než kapacity.

Kritéria Statické (vložené) Dynamický (Descriptiontový objekt)
Jak je popis napsán Páry hodnot vlastností zadané uvnitř volání testovacího objektu Vlastnosti přidané k objektu vytvořenému pomocí Description.Create()
Opakované použití Opakuje se v každém příkazu, který potřebuje objekt Uloženo v jedné proměnné a předáváno všude, kde je potřeba
čitelnost Krátké výroky zůstávají čitelné; dlouhé se stávají nepraktickými Další řádky nastavení, ale samotný příkaz zůstává krátký
Změny za běhu Hodnoty jsou fixní, pokud nejsou zřetězeny z proměnných Hodnoty vlastností lze před každým použitím znovu přiřadit
Funguje s podřízenými objekty (ChildObjects) Ne, argument filtru musí být Descriptiontový objekt Ano, toto je požadovaný formulář
Nejlépe se hodí Jeden nebo dva kroky na objektu, který není v repozitáři Opakovaně používané objekty nebo kolekce načítané za běhu

Proč používat Descriptive Programování?

Níže uvedený přepis doprovází video s ukázkou reálného scénáře, kde počet objektů nelze předem znát.

Přepis videa

  • Otázkou za milion dolarů je, proč používat DP, když proces identifikace objektů provádí... QTP
  • Předpokládejme, že máte za úkol otestovat pracovní portál. Zadáte do portálu vyhledávací dotaz a test očekává, že vyberete všechny dostupné pracovní pozice a kliknete na tlačítko „Ucházet se o pracovní pozici“.
  • Počet zobrazených úloh však bude záviset na vyhledávacím dotazu a na úlohách dostupných v době spuštění skriptu a neexistuje způsob, jak předem předpovědět počet zobrazených úloh.
  • V takových případech můžete použít popisné programování. I když neznáte počet a názvy zaškrtávacích políček, znáte třídu objektů jako „WebCheck“.Box"
  • Můžete použít Metoda ChildObjects vrátit objekty patřící konkrétnímu rodiči
  • Řádek kódu jako –
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    vrátí všechny podřízené objekty pro tuto stránku.

  • Ale my chceme pouze WebCheckBox objekty. Abychom to dosáhli, můžeme vytvořit objekt filtru a nastavit jeho vlastnost na třídu zaškrtávacích políček webu a poté tento filtr předat jako argument metodě ChildObjects.
  • V tomto případě se vrátí pouze zaškrtávací políčka.
  • Dále můžete napsat kód podobný tomuto, který přistupuje k celé kolekci zaškrtávacích políček počínaje od nuly a nastavuje všechna zaškrtávací políčka do stavu ON.
  • Dále můžete kliknout na tlačítko použít a dokončit test
  • Můžete také použít DescriptProgramování pro spouštění objektů, které se obtížně zaznamenávají, jako jsou automatické skrytí panelů, objekty s měnící se hierarchií, vnořené vnitřní objekty, dílčí nabídky.
  • Můžete také provádět pokročilé manipulace s řetězci pomocí popisného programování
  • Ve spojení s vlastností index by mohlo být deskriptivní programování velmi užitečné při identifikaci obtížných objektů.
  • Pokud používáte programový popis pro objekt v hierarchii objektů, budete muset pro následné podřízené objekty použít popisné programování.
  • Například pokud bylo pro objekt Page použito deskriptivní programování, ale následný podřízený objekt WinEdit pochází z úložiště objektů, je příkaz nesprávný.
  • Naopak, pokud se deskriptivní programování použije pro objekty Page i WinEdit, je toto tvrzení správné.

V přepisu filtr a smyčka popsaná v zápisu vypadají takto:

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

Kolekce je založena na nule, a proto smyčka končí na Počet – 1Protože se filtr vyhodnocuje při spuštění řádku, stejný kód funguje bez ohledu na to, zda vyhledávání vrátí tři úlohy nebo třicet.

Regulární výrazy, ordinální identifikátory a běžné chyby

DescriptŽivé programování se chová dvěma způsoby, které většinu lidí překvapí, když příkaz poprvé selže bez viditelného důvodu.

1) Každá hodnota vlastnosti je považována za regulární výraz. Titulek jako například Celkem (USD) proto se neshoduje, protože závorky jsou syntax regulárních výrazů. Ukončete je zpětným lomítkem nebo vypněte vyhodnocování regulárních výrazů pro danou vlastnost na Descriptiontový objekt:

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

2) Ordinální identifikátory přerušují vazby. Pokud popis stále odpovídá více než jednomu objektu, přidejte index, umístění or čas stvoření jako další vlastnost. Počet indexů začíná na nule:

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

Před zahájením ladění aplikace stojí za zkontrolování tři další úskalí:

  • Použijte micclass, ne štítek Jméno třídy zobrazeno v Object Spy. Zobrazovaný název není platnou vlastností v popisu.
  • Názvy vlastností nerozlišují velká a malá písmena, ale musí být napsány přesně tak, jak je technologie hlásí, včetně mezery v připojený text a tag html.
  • DescriptŽivé programování obchází repozitář; nezlepšuje rozpoznávání objektů. Pokud není načten správný doplněk, žádný popis neumožní identifikovat objekt.

Nejčastější dotazy

Bod Objektový špión na ovládacím prvku a přečtěte si jeho identifikační vlastnosti nebo zavolejte GetROProperty za běhu. Zkopírujte názvy přesně tak, jak jsou uvedeny, a nezapomeňte, že Object Spy zobrazí micclass pod popiskem Název třídy.

Obvykle ne. Vyhledávání v repozitáři vyhodnotí uložený popis jednou, zatímco popisný příkaz se vyhodnotí pokaždé, když se spustí řádek. Výhodou popisného programování je flexibilita u nepředvídatelných objektů, nikoli hrubá rychlost.

Vytvořte Descriptobjekt ion uvnitř opakovaně použitelné funkce a ponechat tuto funkci v VBScript knihovna funkcí spojená s testem. Každá akce, která načte knihovnu, ji pak může volat, takže jedna úprava aktualizuje všechny volající funkce.

Identifikace s pomocí umělé inteligence porovnává ovládací prvky podle vizuálního vzhledu a textu popisku v okolí namísto pevných vlastností, což eliminuje některé ručně psané popisy. DescriptIonty jsou stále potřeba tam, kde jsou objekty počítány nebo filtrovány za běhu.

Kopilot může skládat smyčky, DescriptFunkce ion.Create volá a vytváří reporty na základě popisu, ale vaši aplikaci nevidí. Každý název a hodnota vlastnosti, které navrhuje, musí být ověřeny oproti skutečnému ovládacímu prvku, než je příkaz důvěryhodný.

Zřídka. A sdílené úložiště objektů uchovává popisy na jednom editovatelném místě a zachovává čitelnost skriptů. Většina týmů uchovává v repozitáři stabilní obrazovky a po popisech sahá pouze tam, kde jsou objekty dynamické.

Zredukujte ji na jednu vlastnost a poté postupně přidávejte ostatní. Kontrola počtu objektů pomocí filtru ChildObjects ukazuje, zda popis neodpovídá ničemu nebo zda se shoduje s několika objekty nejednoznačně.

Ano. Funguje to pro jakoukoli technologii, jejíž doplněk je načten, včetně standardních. Windows, web, .NET, Java a objekty emulátoru terminálu. Liší se pouze názvy vlastností, protože každý doplněk hlásí své vlastní identifikační vlastnosti.

Shrňte tento příspěvek takto: