DescriptProgrammazione in tempo reale QTP/UFT: Dinamico e statico

⚡ Riepilogo intelligente

Descriptla programmazione ive permette un QTP or UFT Una dichiarazione contiene la descrizione dell'oggetto stesso, come coppie valore-proprietà o come un Descriptoggetto ion, quindi un passaggio viene eseguito anche se l'oggetto non è mai stato memorizzato nel repository degli oggetti.

  • 🔘 Ignora il repository: La descrizione è inclusa nell'istruzione, quindi non è necessario cercare il nome di alcun oggetto in fase di esecuzione.
  • ☑️ Forma statica: Le coppie proprietà-valore sono scritte in linea come "proprietà:=valore", separate da virgole all'interno della chiamata all'oggetto di test.
  • ✅ Forma dinamica: Description.Create crea una raccolta di proprietà riutilizzabili che possono essere condivise da molte istruzioni.
  • 🧪 Progettato per oggetti imprevedibili: Pannelli a scomparsa automatica, gerarchie variabili, oggetti interni annidati e set di risultati di dimensioni sconosciute.
  • ️ ChildObjects si abbina ad esso: A DescriptL'oggetto ion utilizzato come filtro restituisce solo i figli corrispondenti a un genitore.
  • ???? Due regole da ricordare: Ogni valore di proprietà viene trattato come un'espressione regolare e, una volta descritto un genitore, è necessario descrivere anche i suoi figli.

Istruzioni di programmazione descrittiva statica e dinamica in QTP and UFT Un

Cosa è Descriptive Programmazione?

Descriptprogrammazione viva viene utilizzato per eseguire operazioni su un oggetto nell'AUT la cui definizione non è memorizzata nel Repository di oggetti. Utilizzando questo meccanismo, è possibile bypassare l'identificazione dal repository degli oggetti e fornire l'oggetto Descriptione nella dichiarazione stessa.

Il nome di un oggetto viene semplicemente utilizzato per associare un oggetto in uno script alla sua descrizione in un repository di oggetti. Ciò significa che, se si modifica il nome dell'oggetto sia nello script che nel repository, lo script dovrebbe comunque funzionare. Guarda il seguente video per approfondire questo concetto.

Clicchi Qui. se il video non è accessibile

Video Highlights

  • Elimina l'oggetto Descriptione della casella WinEdit del nome dell'agente dal repository degli oggetti. Se esegui nuovamente il test, fallirà, poiché non riesce a riconoscere l'oggetto. Esaminiamo il motivo per cui lo script fallisce
  • Durante l'esecuzione, UFT Si identifica l'operazione che viene eseguita sulla casella WinEdit e l'oggetto DescriptL'ione nel repository degli oggetti viene memorizzato come nome dell'agente. Utilizza questo nome per track l'oggetto nel repository degli oggetti. Per un oggetto padre, non è possibile avere due oggetti figlio con lo stesso nome, quindi QTP mappa in modo univoco l'oggetto nel repository. Quindi utilizza la descrizione memorizzata nel repository degli oggetti, sostituisce il nome con la descrizione e utilizza l'istruzione risultante per identificare l'oggetto nell'applicazione in fase di test.
  • Poiché nel nostro caso avevamo eliminato completamente questa descrizione dell'oggetto, lo script fallisce
  • Ma cosa succederebbe se, invece di QTP sostituendo la descrizione dell'oggetto, tu come tester specifichi direttamente le descrizioni degli oggetti nel tuo script? Questo non è altro che "Descriptprogrammazione”

Questo singolo cambio di responsabilità è ciò che le due forme seguenti implementano, e ciascuna forma si adatta a un diverso tipo di sceneggiatura.

Tipi di Descriptprogrammazione viva

Puoi usare Descriptive programmazione in due modi

  1. statica
  2. Dinamico

statica Descriptprogrammazione viva

Nel metodo statico, per l'identificazione dell'oggetto, si specifica la proprietà di un oggetto nel seguente formato

property:=values,

Questo formato è chiamato coppia proprietà-valore ed è racchiuso tra virgolette. Scritta per esteso, un'istruzione statica appare così:

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

Se il tuo oggetto utilizza più descrizioni per l'identificazione, puoi specificarle utilizzando le virgole

Quindi, nel nostro caso, la descrizione per Nome agente diventa

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

Le descrizioni statiche vengono lette nel punto in cui viene eseguita l'istruzione, il che le rende ideali per passaggi singoli e per correzioni rapide a uno script che non si desidera registrare nuovamente.

Dinamico Descriptprogrammazione viva

Il secondo metodo per eseguire la stessa azione è utilizzare Dynamic Descriptprogrammazione viva

Nel caso in cui il tuo script utilizzi più volte il candidato oggetto di programmazione descrittiva, sarà molto faticoso specificare tutte le coppie di valori di proprietà per ciascuna istruzione

In questi casi, puoi utilizzare il DescriptClasse ionica fornita da QTP

La sintassi per la creazione di un oggetto descrizione è

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

Questo è il metodo dinamico

Compilando quell'oggetto con le proprietà del nome dell'agente utilizzate sopra, si ottiene una descrizione completa e riutilizzabile:

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

La variabile oDesc Ora può essere passato a qualsiasi istruzione che necessiti di quell'oggetto, quindi una singola modifica aggiorna ogni passaggio che lo utilizza.

Statico vs Dinamico DescriptProgrammazione ive: quando utilizzare ciascuna

Entrambe le forme producono la stessa descrizione in fase di esecuzione, quindi la scelta riguarda la manutenzione piuttosto che le funzionalità.

Criteri Statico (in linea) Dinamico (Descriptoggetto ionico)
Come viene scritta la descrizione Coppie valore-proprietà digitate all'interno della chiamata dell'oggetto di test Proprietà aggiunte a un oggetto creato con Description.Create()
Riutilizzo Ripetuto in ogni istruzione che necessita dell'oggetto Memorizzato in una variabile e passato ovunque sia necessario
leggibilità Le dichiarazioni brevi rimangono leggibili; quelle lunghe diventano ingestibili. Righe di impostazione aggiuntive, ma l'istruzione in sé rimane breve.
Modifiche in fase di esecuzione I valori sono fissi a meno che non vengano concatenati da variabili I valori delle proprietà possono essere riassegnati prima di ogni utilizzo
Funziona con ChildObjects No, l'argomento del filtro deve essere un Descriptoggetto ionico Sì, questo è il modulo richiesto
più adatto a Uno o due passaggi su un oggetto che non è presente nel repository Oggetti utilizzati ripetutamente o raccolte recuperate in fase di esecuzione

Perché usare Descriptive Programmazione?

La trascrizione che segue accompagna la video dimostrazione di uno scenario reale in cui il numero di oggetti non può essere noto in anticipo.

Trascrizione video

  • La domanda da un milione di dollari è perché usare DP quando il processo di identificazione degli oggetti è gestito da QTP
  • Supponiamo che ti venga assegnato il compito di testare un portale di lavoro. Inserisci una query di ricerca nel portale e il test prevede che tu selezioni tutte le offerte di lavoro disponibili e clicchi su "Candidati".
  • Tuttavia, il numero di offerte di lavoro visualizzate dipenderà dalla query di ricerca e dalle offerte di lavoro disponibili al momento dell'esecuzione dello script, e non è possibile prevedere in anticipo il numero di offerte di lavoro che verranno visualizzate.
  • In questi casi, è possibile utilizzare la programmazione descrittiva. Anche se non si conoscono il numero e i nomi delle caselle di controllo, si conosce la classe degli oggetti come "WebCheck".Box".
  • È possibile utilizzare il metodo ChildObjects per restituire oggetti appartenenti a un particolare genitore
  • Una riga di codice come –
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    restituirà tutti gli oggetti figlio per questa pagina.

  • Ma vogliamo solo WebCheckBox oggetti. Per fare ciò possiamo creare un oggetto filtro e impostare la sua proprietà sulla classe casella di controllo web, quindi passare questo filtro come argomento al metodo ChildObjects
  • In questo caso vengono restituite solo le caselle di controllo.
  • Successivamente, puoi scrivere un codice simile a questo, che accede all'intera raccolta di caselle di controllo a partire da zero e le attiva tutte.
  • Successivamente, puoi fare clic sul pulsante Applica per completare il test
  • È inoltre possibile utilizzare DescriptProgrammazione attiva per eseguire oggetti difficili da registrare, come pannelli con nascondimento automatico, oggetti con gerarchie variabili, oggetti interni nidificati, sottomenu.
  • Puoi anche eseguire manipolazioni avanzate di stringhe utilizzando la programmazione descrittiva
  • Insieme alla proprietà dell'indice, la programmazione descrittiva potrebbe essere molto utile per identificare oggetti difficili.
  • Se si utilizza la descrizione programmatica per un oggetto in una gerarchia di oggetti, sarà necessario utilizzare la programmazione descrittiva per gli oggetti figlio successivi.
  • Ad esempio, se per l'oggetto Page è stata utilizzata la programmazione descrittiva, ma il successivo oggetto figlio WinEdit proviene dal Repository degli oggetti, l'affermazione è errata.
  • Al contrario, quando la programmazione descrittiva viene utilizzata sia per l'oggetto Page che per l'oggetto WinEdit, l'affermazione è corretta

Trascritti per esteso, il filtro e il ciclo descritti nella trascrizione appaiono così:

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

La raccolta è basata su zero, motivo per cui il ciclo si ferma a Conteggio – 1Poiché il filtro viene valutato durante l'esecuzione della riga, lo stesso codice funziona sia che la ricerca restituisca tre risultati sia che ne restituisca trenta.

Espressioni regolari, identificatori ordinali e insidie ​​comuni

DescriptLa programmazione ive si comporta in due modi che sorprendono la maggior parte delle persone la prima volta che un'istruzione fallisce senza una ragione apparente.

1) Ogni valore di proprietà viene trattato come un'espressione regolare. Una didascalia come Totale (USD) pertanto non corrisponde, perché le parentesi sono sintassi di espressione regolare. Esegui l'escape con una barra rovesciata oppure disattiva la valutazione delle espressioni regolari per quella proprietà su un Descriptoggetto ionico:

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

2) Gli identificatori ordinali risolvono i casi di parità. Quando una descrizione corrisponde ancora a più di un oggetto, aggiungi Index, posizione or tempo di creazione come proprietà aggiuntiva. Il conteggio dell'indice inizia da zero:

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

Prima di iniziare il debug dell'applicazione, è opportuno verificare altri tre potenziali problemi:

  • Usa il classe microfono, non l'etichetta Nome della classe Come mostrato in Object Spy, il nome visualizzato non è una proprietà valida in una descrizione.
  • I nomi delle proprietà non fanno distinzione tra maiuscole e minuscole, ma devono essere scritti esattamente come li riporta la tecnologia, compreso lo spazio in testo allegato and tag html.
  • DescriptLa programmazione in tempo reale aggira il repository; non migliora il riconoscimento degli oggetti. Se il componente aggiuntivo corretto non viene caricato, nessuna descrizione renderà l'oggetto identificabile.

DOMANDE FREQUENTI

punto Spia di oggetti accedere al controllo e leggere le sue proprietà di identificazione oppure chiamare GetROProperty in fase di esecuzione. Copiare i nomi esattamente come elencati, ricordando che Object Spy visualizza micclass sotto l'etichetta Nome classe.

Di solito no. Una ricerca nel repository risolve una descrizione memorizzata una sola volta, mentre un'istruzione descritta viene valutata ogni volta che la riga viene eseguita. Il vantaggio della programmazione descrittiva risiede nella flessibilità sugli oggetti imprevedibili, non nella pura velocità.

Costruisci il Descriptoggetto ione all'interno di una funzione riutilizzabile e mantieni quella funzione in un VBScript Libreria di funzioni associata al test. Ogni azione che carica la libreria può quindi richiamarla, in modo che una singola modifica aggiorni tutti i chiamanti.

L'identificazione assistita dall'IA abbina i comandi in base all'aspetto visivo e al testo dell'etichetta nelle vicinanze, anziché in base a proprietà fisse, eliminando così alcune descrizioni scritte a mano. DescriptGli ioni sono ancora necessari quando gli oggetti vengono contati o filtrati in fase di esecuzione.

Il copilota può fornire la struttura per i loop, Description.Crea chiamate e report attorno a una descrizione, ma non può vedere la tua applicazione. Ogni nome di proprietà e valore suggerito deve essere confermato rispetto al controllo reale prima che l'affermazione sia considerata attendibile.

Raramente. A repository di oggetti condivisi Mantiene le descrizioni in un unico luogo modificabile e rende gli script leggibili. La maggior parte dei team mantiene schermate stabili nel repository e ricorre alle descrizioni solo quando gli oggetti sono dinamici.

Riducilo a una singola proprietà, quindi aggiungi di nuovo le altre una alla volta. Verificare il conteggio degli oggetti con un filtro ChildObjects mostra se la descrizione non corrisponde a nulla o corrisponde in modo ambiguo a più oggetti.

Sì. Funziona per qualsiasi tecnologia il cui componente aggiuntivo sia caricato, incluso quello standard Windows, web, .NET, Java e oggetti emulatore di terminale. Differiscono solo i nomi delle proprietà, poiché ogni componente aggiuntivo segnala le proprie proprietà di identificazione.

Riassumi questo post con: