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ů.
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
- statický
- 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.
