2010-10-01 3 views
1

J'utilise sélenium-client pour tester un site. Je veux obtenir toutes les balises correspondant à un sélecteur particulier, puis récupérer les attributs href dans un tableau. Quelqu'un peut-il me dire comment je peux le faire? Par exemple, cela renvoie le href du premier correspondant « a » tag:Collecter un attribut particulier de tous les éléments correspondants dans le client selenium?

browser.get_attribute "//a[contains(@id,'friendImageLink')]/@href" 
=> "http://asite/some-path" 

Puis-je faire ce qui précède et se retrouver avec un tableau de chaînes href? Il se sent comme il devrait être facile, mais je ne peux pas travailler dehors:/Si je fais cela dans Firebug

$x("//a[contains(@id,'friendImageLink')]/@href") 

Je reçois un tableau d'objets en arrière, donc il se sent comme je suis proche.

merci, max

EDIT - Je pensais que de compter les éléments correspondants et itérer puis à travers eux, mais je ne peux pas sembler sélectionner l'élément n'th du tout. Par exemple, la page en question a 38a balises correspondant à la "contient" condition, mais si je le fais

browser.get_attribute "//a[contains(@id,'friendImageLink')][2]/@href" 

Je reçois un message d'erreur indiquant Sélénium :: CommandError: OU: Element/descendant :: un [contains (@ id, 'friendImageLink')] [2]/non trouvé

EDIT - Je viens de trouver un moyen. @browser.get_all_links renvoie tous les identifiants de tous les liens de la page dans un tableau. Je peux ensuite grep ceux que je veux et parcourir sur le tableau filtré résultant, obtenir chaque lien, puis obtenir c'est href. par exemple

@browser.get_all_links.grep(/friendImageLink/).collect{|link_id| @browser.get_attribute("//a[@id='#{link_id}']/@href") } 

Répondre

4

Ceci est une FAQ. Ce:

//a[contains(@id,'friendImageLink')][2] 

Moyens: Tout a étant le deuxième a enfant ayant un attribut id contenant friendImageLink

opérateur // a plus priorité que prédicat

Vous devez:

(//a[contains(@id,'friendImageLink')])[2]/@href 
+0

+1 pour une explication correcte. –

+0

aaahhhh ... merci. –

+0

@Max Williams: Vous êtes bienvenu. –

Questions connexes