Question

Je veux utiliser la reconnaissance d'objets dynamique (programmation descriptive) pour trouver le premier bouton « Supprimer » qui se produit après un texte donné (par exemple, le premier bouton Supprimer qui apparaît après le texte « Point XYZ-123 »). J'ai un moyen kludgy de le faire si le texte et le bouton sont à l'intérieur d'une seule ligne d'un WebTable, mais j'espérais une solution plus élégante ou fiable (je l'espère qui ne sera pas compter sur les tables).

Je préférerais éviter d'utiliser la propriété .object, puisque la documentation affirme que la propriété .object retourne uniquement les objets DOM lorsque vous testez dans les IE, et non dans Firefox.

Merci!

Était-ce utile?

La solution

Voici une solution qui utilise l'attribut sourceIndex, notez que sourceIndex est un IE seule propriété mais QTP simule sur Firefox pour le même script fonctionnera sur les deux navigateurs. Vous pouvez choisir d'utiliser les propriétés de coordonnées sur la base comme abs_x et abs_y si source_index ne correspond pas à la facture.

Le code qui suit répond à la question posée, en faire une fonction générale est laissée en exercice pour le lecteur; o)

''#1. Create description for locator text 
Set textD = Description.Create()
textD("micclass").Value = "WebElement"
textD("innertext").Value = ".*Item XYZ-123.*"

''#2. Find locator sourceIndex
set texts = Browser("B").Page("P").ChildObjects(textD)
Set text = texts(texts.Count-1) ' Take last text '
textIdx = text.GetROProperty("source_index") ' works for FF too '

''#3. Create description for button 
Set buttonD = Description.Create()
buttonD("micclass").Value = "WebButton"
buttonD("value").Value = "Delete"
Set btns = Browser("B").Page("P").ChildObjects(buttonD)

''#4. Find first button after locator text 
For i = 0 To btns.Count
    If btns(i).GetROProperty("source_index") > textIdx Then
        btns(i).Click ' Or whatever you want to do with it '
        Exit For
    End If
Next

Les choses à noter à propos de cette solution:

  • Il ne suppose rien sur l'élément contenant le texte, si vous savez que cela est tout le texte dans l'élément que vous pouvez supprimer les .*s et / ou ajouter un pour une performance bien meilleure « balise html ».
    • C'est pourquoi nous prenons le dernier élément qui correspond à la description, le premier élément sera le BODY etc.
  • Dans la description du texte que nous devons préciser « micclass » = « WebElement » car par défaut ChildObject filtre les WebElements en supposant qu'ils sont non-intéressant.

Autres conseils

En supposant qu'il n'y a pas un moyen plus facile de le faire, vous pouvez essayer analyser le code HTML. Trouvez le texte de recherche dans le code HTML, et commencer à chercher le code HTML à partir de ce moment-là en avant pour un bouton « Supprimer ». Vous devriez être en mesure de tirer une carte d'identité ou d'une autre propriété identifiant du code HTML que vous pouvez utiliser pour la programmation descriptive.

Avez-vous des échantillons du code HTML et QTP que nous pourrions examiner pour voir plus de détails? Peut-être il y a un moyen plus facile.

Permettez-moi de reformuler la question.

Comment récupérer référence à un objet contenu dans WebTable si le numéro de ligne est inconnu, mais vous avez une valeur clé unique pour trouver la ligne?

Cela vaut pour les boutons, cases à cocher, comboboxes et tout autre objet dans le tableau.

La mise en œuvre.

1) Trouver rangée

intRow = objWebTable.GetRowWithCellText (sKeyValueText, "élément") Vous pouvez spécifier la colonne par nom ou numéro

2) Retreive objet enfant

Set objButton = objWebTable.ChildItem (intRow, intCol, "Webbutton", 0) Vous pouvez spécifier la colonne par numéro. Le dernier paramètre entre en vigueur si vous avez plus d'un bouton à la même cellule.

Vérifiez d'autres exemples techniques dans mon blog ( http://automationbeyond.wordpress.com/ ) .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top