DescriptProgrammation interactive dans QTP/UFT: Dynamique et statique
⚡ Résumé intelligent
DescriptLa programmation interactive permet à QTP or UFT Une instruction contient la description de l'objet elle-même, sous forme de paires propriété-valeur ou sous forme de DescriptL'objet ion permet donc d'exécuter une étape même si l'objet n'a jamais été stocké dans le référentiel d'objets.
Qu'est-ce que le DescriptProgrammation ive ?
Descriptprogrammation vivante est utilisé pour exécuter des opérations sur un objet de l'AUT dont la définition n'est pas stockée dans le Référentiel d'objetsGrâce à ce mécanisme, vous pouvez contourner l'identification à partir du référentiel d'objets et fournir l'objet. Description dans la déclaration elle-même.
Le nom d'un objet sert simplement à associer un objet d'un script à sa description dans un référentiel d'objets. Ainsi, même si vous modifiez le nom de l'objet à la fois dans votre script et dans le référentiel, le script devrait s'exécuter. Visionnez la vidéo suivante pour en savoir plus sur ce concept.
Cliquez à nouveau ici si la vidéo n'est pas accessible
Extraits vidéo
- Supprimer l'objet DescriptImpossible de saisir le nom de l'agent dans la zone de texte WinEdit du référentiel d'objets. Si vous relancez le test, il échouera, car l'objet est introuvable. Examinons la raison de cet échec.
- Pendant l'exécution, UFT On identifie l'opération effectuée sur la boîte WinEdit, et l'objet DescriptL'élément dans le référentiel d'objets est stocké sous le nom de l'agent. Il utilise ce nom pour track l'objet dans le référentiel d'objets. Pour un parent, vous ne pouvez pas avoir deux objets enfants portant le même nom, donc QTP Il établit une correspondance unique entre l'objet et le référentiel. Il utilise ensuite la description stockée dans le référentiel d'objets, remplace le nom par cette description et utilise l'instruction résultante pour identifier l'objet dans l'application testée.
- Comme dans notre cas nous avions complètement supprimé cette description d'objet, le script échoue.
- Mais que se passerait-il si, au lieu de QTP En remplaçant la description de l'objet, vous, en tant que testeur, spécifiez directement les descriptions des objets dans votre script ? Ce n'est rien d'autre que « … »DescriptProgrammation ive »
Ce simple changement de responsabilité est ce que mettent en œuvre les deux formulaires ci-dessous, et chaque formulaire convient à un type de scénario différent.
Types d' DescriptProgrammation ive
Vous pouvez utiliser Descriptprogrammation ive de deux manières
- Statique
- Dynamique
Statique DescriptProgrammation ive
Dans la méthode statique, pour l'identification d'un objet, vous spécifiez la propriété d'un objet au format suivant
property:=values,
Ce format est appelé paire propriété-valeur et est encadré par des guillemets. Écrite en toutes lettres, une instruction statique ressemble à ceci :
TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method
Si votre objet utilise plusieurs descriptions pour son identification, vous pouvez les spécifier à l'aide de virgules.
Ainsi, dans notre cas, la description du nom de l'agent devient
"nativeclass:=Edit", "attached text:=Agent Name:"
Les descriptions statiques sont lues au moment de l'exécution de l'instruction, ce qui les rend idéales pour les étapes ponctuelles et les corrections rapides d'un script que vous ne souhaitez pas réenregistrer.
Dynamique DescriptProgrammation ive
La deuxième méthode pour effectuer la même action consiste à utiliser Dynamic Descriptprogrammation vivante
Dans le cas où votre script utilise plusieurs fois l'objet de programmation descriptif candidat, il sera très fastidieux de spécifier toutes les paires de valeurs de propriété pour chaque instruction.
Dans de tels cas, vous pouvez utiliser DescriptClasse d'ions fournie par QTP
La syntaxe pour créer un objet de description est :
Set MyDescription = Description.Create() MyDescription("property").Value = "property-value"
Il s'agit de la méthode dynamique
Renseigner cet objet avec les propriétés Nom de l'agent utilisées ci-dessus permet d'obtenir une description complète et réutilisable :
Dim oDesc Set oDesc = Description.Create() oDesc("nativeclass").Value = "Edit" oDesc("attached text").Value = "Agent Name:"
La variable oDesc peut désormais être transmis à n'importe quelle instruction qui a besoin de cet objet, de sorte qu'une modification met à jour chaque étape qui l'utilise.
Statique vs Dynamique DescriptProgrammation interactive : quand utiliser chaque
Les deux formats produisent la même description d'exécution ; le choix porte donc sur la maintenance plutôt que sur les fonctionnalités.
| Critères | Statique (en ligne) | Dynamique (Descriptobjet ionique) |
|---|---|---|
| Comment la description est rédigée | Les paires de valeurs de propriété typées dans l'appel d'objet de test | Propriétés ajoutées à un objet créé avec Description.Créer() |
| Réutilisation | Répété dans chaque instruction nécessitant l'objet | Stocké dans une variable et transmis partout où cela est nécessaire. |
| lisibilité | Les phrases courtes restent lisibles ; les longues deviennent difficiles à manier. | Lignes de configuration supplémentaires, mais l'instruction elle-même reste courte. |
| Modifications en cours d'exécution | Les valeurs sont fixes sauf si elles sont concaténées à partir de variables. | Les valeurs des propriétés peuvent être réattribuées avant chaque utilisation. |
| Fonctionne avec les objets enfants | Non, l'argument de filtre doit être un Descriptobjet ionique | Oui, il s'agit du formulaire requis |
| Meilleur adapté à | Une ou deux étapes sur un objet qui n'est pas dans le dépôt | Objets utilisés de manière répétée ou collections récupérées lors de l'exécution |
Pourquoi utiliser DescriptProgrammation ive ?
La transcription ci-dessous accompagne la vidéo présentant un scénario réel où le nombre d'objets ne peut être connu à l'avance.
Transcription de la vidéo
- La question à un million de dollars est de savoir pourquoi utiliser DP alors que le processus d'identification des objets est géré par QTP
- Supposons que vous soyez chargé de tester un portail d'emploi. Vous effectuez une recherche sur le portail, et le test prévoit que vous sélectionniez toutes les offres d'emploi disponibles et cliquiez sur « Postuler ».
- Mais le nombre d'offres d'emploi affichées dépendra de la requête de recherche et des offres disponibles au moment de l'exécution du script, et il n'existe aucun moyen de prédire à l'avance le nombre d'offres qui seront affichées.
- Dans ce genre de cas, vous pouvez utiliser la programmation descriptive. Même si vous ne connaissez pas le nombre et les noms des cases à cocher, vous connaissez la classe des objets : « WebCheck ».Box »
- Vous pouvez utiliser le méthode ChildObjects pour renvoyer des objets appartenant à un parent particulier
- Une ligne de code comme –
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
renverra tous les objets enfants de cette page.
- Mais nous voulons seulement WebCheckBox objets. Pour ce faire, nous pouvons créer un objet filtre et définir sa propriété sur la classe de case à cocher Web, puis passer ce filtre comme argument à la méthode ChildObjects.
- Dans ce cas, seules les cases à cocher sont renvoyées.
- Ensuite, vous pouvez écrire un code comme celui-ci, qui accède à l'ensemble de la collection de cases à cocher en commençant par zéro et active toutes les cases à cocher.
- Ensuite, vous pouvez cliquer sur le bouton Appliquer pour terminer le test
- Vous pouvez également utiliser Descriptive Programmation pour exécuter des objets difficiles à enregistrer comme les panneaux de masquage automatique, les objets avec des hiérarchies changeantes, les objets internes imbriqués, les sous-menus.
- Vous pouvez également effectuer des manipulations avancées de chaînes à l'aide de la programmation descriptive.
- Associée à la propriété d'index, la programmation descriptive pourrait s'avérer très utile pour identifier les objets difficiles.
- Si vous utilisez une description programmatique pour un objet dans une hiérarchie d'objets, vous devrez utiliser une programmation descriptive pour les objets enfants suivants.
- Par exemple, si la programmation descriptive a été utilisée pour l'objet Page mais que l'objet enfant WinEdit suivant provient du référentiel d'objets, l'affirmation est incorrecte.
- Au contraire, lorsque la programmation descriptive est utilisée à la fois pour les objets Page et WinEdit, l'affirmation est correcte.
Une fois écrits, le filtre et la boucle décrits dans la transcription ressemblent à ceci :
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 collection est indexée à partir de zéro, c'est pourquoi la boucle s'arrête à Compte – 1. Étant donné que le filtre est évalué lors de l'exécution de la ligne, le même code fonctionne, que la recherche renvoie trois ou trente offres d'emploi.
Expressions régulières, identificateurs ordinaux et pièges courants
DescriptLa programmation interactive se comporte de deux manières qui surprennent la plupart des gens la première fois qu'une instruction échoue sans raison apparente.
1) Chaque valeur de propriété est traitée comme une expression régulière. Une légende telle que Total (USD) Par conséquent, la correspondance échoue car les parenthèses font partie de la syntaxe des expressions régulières. Échappez-les avec une barre oblique inverse ou désactivez l'évaluation des expressions régulières pour cette propriété. Descriptobjet ionique :
Set oDesc = Description.Create() oDesc("name").Value = "Total (USD)" oDesc("name").RegularExpression = False
2) Les identifiants ordinaux permettent de départager les égalités. Lorsqu'une description correspond encore à plusieurs objets, ajoutez indice, Localisation or temps de création comme propriété supplémentaire. L'index commence à zéro :
WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99" WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"
Il convient de vérifier trois autres pièges avant de commencer le débogage de l'application :
- Utilisez le classe de micro, pas l'étiquette Nom du cours Affiché dans Object Spy. Le nom d'affichage n'est pas une propriété valide dans une description.
- Les noms de propriétés ne sont pas sensibles à la casse, mais doivent être orthographiés exactement comme le système les indique, y compris l'espace. texte joint et balise HTML.
- DescriptLa programmation interactive contourne le référentiel ; elle n’améliore pas la reconnaissance des objets. Si le module complémentaire approprié n’est pas chargé, aucune description ne permettra d’identifier l’objet.
