2010-07-12 8 views
1

J'essaie de trouver un moyen de trouver le dernier nœud qui correspond à un xpath donné en utilisant la fonction last(). Le problème est que le dernier élément du chemin a également une contrainte spécifiée.Sélection du dernier nœud d'une liste de correspondances

"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']" 

si j'utilise

"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']' and last()]" 

il correspond encore plusieurs nœuds. Peut-être que l'une des raisons est que la dernière balise div dans le chemin contient 2 éléments span. aidez-moi s'il vous plaît à sélectionner le dernier nœud qui correspond au chemin ci-dessus.

Merci et salutations,
Vamyip

+0

Bonne question (1). Voir ma réponse pour une explication complète et une solution correcte. –

+0

Je suis simplement intéressé par la sélection du dernier nœud. Que ce soit un sélecteur xpath ou css. Alors s'il vous plaît aidez-moi avec l'un d'eux. Merci – vamyip

Répondre

1

Si votre xml est xhtml, pourquoi ne pas utiliser des sélecteurs CSS? Si je ne me trompe pas, les sélectionneurs devraient être

#someId > ul > li > div.class1.class2 > span.someType2 

#someId > ul > li > div.class1.class2 > span.someType2:last 

j'utilisais XPath sur des pages html aussi, mais quand sélecteurs CSS se sont répandues, je trouve qu'ils sont plus pris en charge dans les navigateurs que XPath.

+0

Le 1er sélecteur que vous avez spécifié fonctionne correctement et correspond au 1er élément. Mais, le mot clé 'last' semble rompre le sélecteur. Y a-t-il une autre syntaxe pour ce mot-clé? Merci – vamyip

+0

Je l'ai testé et cela fonctionne. Qu'est-ce que vous utilisez pour lancer la requête du sélecteur, et dans quelle plateforme/navigateur? –

+0

Je l'utilise dans les scripts selenium-rc. Vous pouvez l'essayer en ajoutant le plugin selenium IDE pour Firefox. Vous devrez vous référer à un petit tutoriel avant de l'utiliser. http://seleniumhq.org De toute façon merci pour votre aide. J'apprécie beaucoup. – vamyip

1

Utilisation:

(//div[@id='someId']/ul/li/div[@class='class1 class2 '] 
            /span[@class='someType2 ']) 
              [last()] 

Prenez note: les crochets entourant l'expression commençant par //. Ceci est une FAQ. [] se lie plus fort que // et c'est pourquoi les crochets sont nécessaires pour indiquer une préséance différente.

+0

Merci pour votre réponse. J'utilise actuellement Xpath pour le sélénium et les parenthèses rompent le Xpath pour le sélénium. Sinon, votre réponse est parfaite, cela fonctionne parfaitement dans xpath viewer et fire xPath. Merci encore – vamyip

+0

@vamyip: Désolé. Dans ce cas, votre question n'est pas une question XPath et doit être classée comme "sélénium-xpath". –

0

En sélénium, vous pouvez également utiliser javascript pour récupérer des éléments. Que diriez-vous quelque chose comme ça?

dom=var list1 = 
    document.getElementById('someId'). 
    getElementsByTagName('li'); 
var finallist = new Array(); 
for (var i=0; i<list1.length; i++) { 
    var list2 = list1[i].getElementsByClassName("class1 class2"); 
    for (var j=0; j<list2.length; j++) { 
    var list3 = list2[j].getElementsByClassName("someType2"); 
    for (var k=0; k<list3.length; k++) { 
     finallist.push(list3[k]; 
    } 
    } 
} 
finallist.pop() 

http://seleniumhq.org/docs/04_selenese_commands.html#locating-by-dom

Questions connexes