Comment utiliser les regex en sélénium locators
Je suis en utilisant selenium RC et je voudrais, par exemple, de récupérer tous les liens éléments avec l'attribut href qui correspondent à:
http://[^/]*\d+com
Je voudrais utiliser:
sel.get_attribute( '//a[regx:match(@href, "http://[^/]*\d+.com")]/@name' )
qui permettrait le retour d'une liste de l'attribut nom de tous les liens qui correspondent à l'expression régulière.
(ou quelque chose comme ça)
grâce
Donc, ce n'est pas de travail, et de quelle manière est-il pas de travail? Pouvez-vous poster le code HTML (ou un fragment de celui-ci) que vous êtes correspondant à contre?
exemple donné et la méthode get_attribute() retourne uniquement un seul élément, et non une liste. L'affiche est de demander ce qui est l'équivalent pour retourner une liste d'attributs, par exemple.
exemple donné et la méthode get_attribute() retourne uniquement un seul élément, et non une liste. L'affiche est de demander ce qui est l'équivalent pour retourner une liste d'attributs, par exemple.
OriginalL'auteur Guy | 2009-09-09
Vous devez vous connecter pour publier un commentaire.
La réponse ci-dessus est probablement la bonne façon de trouver TOUS les liens qui correspondent à une expression régulière regex, mais j'ai pensé qu'il serait utile de répondre à l'autre partie de la question, comment utiliser les regex dans Xpath locators. Vous avez besoin d'utiliser l'expression régulière correspond à (), comme ceci:
(ce qui, bien sûr, sur le div avec id=cases à cocher", ou "id=cheANYTHINGHEREboxes')
Être conscient, cependant, que les matches de la fonction n'est pas supportée par tous les navigateur natif implémentations de Xpath (plus manifestement, l'utilisation de cette dans FF3 lèvera une erreur: invalid xpath[2]).
Si vous avez des problèmes avec votre navigateur (comme je l'ai fait avec FF3), essayez d'utiliser le Sélénium est allowNativeXpath("false") pour basculer vers le JavaScript Xpath interprète. Ce sera plus lent, mais il ne semble pas travailler avec plus de fonctions Xpath, y compris les "correspondances" et "fin". 🙂
À l'aide de xpath-vérificateur de l'add-on est une bonne idée! Je n'ai jamais pensé à en chercher un. Je n'ai pas écris trop de xpath locators. À mon travail, j'ai construit un outil indépendant framework de test s'appuie localisateurs de plusieurs outils, dont le Sélénium, à l'aide de notre propre syntaxe simple. Je n'avais qu'à apprendre ces xpath locators assez bien pour écrire du code qui pourrait générer. 🙂
+1 pour allowNaticeXPath(faux) de l'extrémité. M'a sauvé beaucoup de casse-tête en ce moment 🙂
OriginalL'auteur Chris Jaynes
Vous pouvez utiliser le Sélénium commande getAllLinks pour obtenir un tableau des id de liens sur la page, que vous pouvez ensuite parcourir et vérifier le href aide de la getAttribute, qui prend le localisateur suivi d'un @ et le nom de l'attribut. Par exemple en Java, ce pourrait être:
La question mentionne obtenir tous liens qui correspondent à l'expression régulière. Comme le Sélénium ne prend pas en charge ce (à ma connaissance), faire tous les liens de la page, puis d'utiliser la langue du client pour vérifier les emplacements à l'encontre d'une expression régulière est une solution sensée.
J'ai édité mon code d'exemple pour faire une expression régulière. Je n'ai pas ce faire à l'origine, car il dépend de la langue du client dans l'utilisation, et je voulais garder la réponse simple.
Il n'y a pas moyen d'utiliser des expressions régulières dans les locators. Il y a certaines choses qui peut être fait, comme l'utilisation de la fonction contains() dans xpath. De toute façon, pour les regexp, je pense que c'est la meilleure alternative. +1
Notez que getAllLinks() je crois n'est utile que si les liens ont des Id. Sinon, vous vous retrouvez avec une liste de chaîne de caractères vide / null articles "la" à parcourir.
OriginalL'auteur Dave Hunt
Une solution possible est d'utiliser
sel.get_eval()
et écrire un script JS qui retourne une liste de liens. quelque chose comme la réponse suivante:sélénium: Est-il possible d'utiliser les regexp en sélénium locators
OriginalL'auteur Guy
Voici quelques autres méthodes aussi bien pour le Sélénium RC. Ce ne sont pas des pure Sélénium solutions, ils permettent l'interaction avec votre langage de programmation structures de données et de Sélénium.
Vous pouvez également obtenir une page HTML la source, puis de l'expression régulière la source de retourner un match ensemble de liens. Utiliser des regex groupement pour séparer les adresses Url, le texte du lien/ID, etc. et vous pouvez ensuite passer ces sélénium, cliquez sur ou naviguer.
Une autre méthode est d'obtenir la page HTML la source ou de l'innerHTML (via DOM locators) d'un parent/de l'élément racine puis convertir le HTML en XML DOM objet dans votre langage de programmation. Vous pouvez alors parcourir le DOM souhaité XPath (avec expression régulière ou non), et d'obtenir un ensemble de nœuds de seulement les liens d'intérêt. À partir de leurs analyser le texte du lien/ID ou l'URL et vous pouvez passer de nouveau le sélénium, cliquez sur ou naviguer.
Sur demande, je suis en fournissant des exemples ci-dessous. Il est des langues mixtes depuis le poste ne semble pas être spécifique à une langue, de toute façon. Je suis juste en utilisant ce que j'avais à disposition pour hack ensemble pour des exemples. Ils ne sont pas entièrement testés ou mis à l'essai, mais j'ai travaillé avec des morceaux de code dans d'autres projets, de sorte que ces sont la preuve de concept code des exemples de comment vous pouvez mettre en œuvre les solutions que je viens de mentionner.
Ok, je vais mettre à jour la réponse avec un exemple ou un lien vers un quand je reçois une chance (peut-être que dans quelques jours ou quelques semaines, un peu occupé en ce moment).
Ce serait très apprécié. Je Vous Remercie.
Ok, j'ai maintenant mis à jour le post avec des exemples de code. Pas entièrement testé, mais je pense être assez bon en tant que preuve de concept des exemples.
En passant, je ne vois pas de présenter mon type de solutions en ligne, donc je ne peux pas référence. Et il faut du temps pour créer de bonnes exécutable démo exemples de code, donc je vais les nettoyer avec de meilleurs exemples quand j'aurai plus de temps, mais ce qu'il y a maintenant est assez bon pour commencer tant que l'on a travaillé avec XPath, regex, les tableaux et les objets.
OriginalL'auteur David