Webdriver findElements Par xpath
1)je suis en train de faire un tutoriel pour montrer comment findElements Par xpath fonctionne. Je voudrais savoir pourquoi il retourne tous les textes qu'à la suite de la <div>
élément avec l'attribut id=container
.
code pour xpath: By.xpath("//div[@id='container']
2) comment dois-je modifier le code de sorte qu'il suffit de renvoyer premier ou la première quelques nœuds qui suivent le parent note
par exemple premier nœud comme "à la Maison", d'abord quelques nœud comme, à la Maison, les Tests manuels et d'Automatisation des Tests.
Merci pour tes conseils et aide!
Voici le fragment de code pour ce tutoriel:
import java.util.List;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class WD_findElements
{
@Test
public void test_byxpath(){
WebDriver driver = new FirefoxDriver();
try{
driver.get("http://www.hexbytes.com");
List<WebElement> elements = driver.findElements(By.xpath("//div[@id='container']"));
System.out.println("Test7 number of elements: " + elements.size());
for(WebElement ele : elements){
//ele.sendKeys("hexbyes");
System.out.println(ele.getText());
//System.out.println(ele.getAttribute("id"));
//System.out.println(ele.getTagName());
}
}
finally {
driver.close();
}
}//end of test_byxpath
public void xpathDemo2() {
WebDriver driver = new FirefoxDriver();
try{
driver.get("http://www.hexbytes.com");
WebElement webelement = driver.findElement(By.id("container"));
//matching single element with attribute value=container
System.out.println("The id value is: " + webelement.getAttribute("id"));
System.out.println("The tag name is: " + webelement.getTagName());
}
finally {
driver.close();
}
}//end of xpathDemo2
public void xpathDemo3() {
WebDriver driver = new FirefoxDriver();
try{
driver.get("http://www.hexbytes.com");
//find first child node of div element with attribute=container
List<WebElement> elements = driver.findElements(By.xpath("//div[@id='container']/*[1]"));
System.out.println("Test1 number of elements: " + elements.size());
for(WebElement ele : elements){
System.out.println(ele.getTagName());
System.out.println(ele.getAttribute("id"));
System.out.println("");
System.out.println("");
}
}
finally {
driver.close();
}
}//end of xpathDemo3
}
OriginalL'auteur user2061466 | 2013-05-03
Vous devez vous connecter pour publier un commentaire.
Vos questions:
Q 1.) Je voudrais savoir pourquoi il retourne tous les textes qu'à la suite de la div?
Il ne devrait pas et je pense ne sera pas. Elle retourne tous les div avec l'attribut " id " de valeur égale 'containter" (et tous les enfants de ce). Mais vous êtes imprimer les résultats avec
ele.getText()
Où getText sera de retour tout le texte contenu de tous les enfants de votre résultat.
Obtenir le visible (c'est à dire pas caché par CSS) innerText de cet élément, y compris les sous-éléments, sans espaces avant ni après.
Retourne:
Le innerText de cet élément.
Q 2.) comment dois-je modifier le code de sorte qu'il suffit de renvoyer premier ou la première quelques nœuds qui suivent le parent note
Ce n'est pas vraiment clair ce que vous cherchez.
Exemple:
La suite de parent de l'élément div est p2.
Ce serait:
ou plus courte
Si vous êtes seulement à la recherche de la première mesure, l'expression d'un "prédicat"
(e.g
[1]
- pour la première. ou[position() < 4]
pour les trois premiers)Si vous êtes à la recherche pour le premier enfant de la première div:
Si il y a seulement un div avec un id vous êtes à la recherche pour le premier enfant:
et ainsi de suite.
<body><div id="container">
je pense que le premier enfant de la balise div est<div id="header">
. J'ai essayé de sortie de la valeur de l'id pour le premier enfant nœud à l'aide dedriver.findElements(By.xpath("//div[@id='container'][1]"))
et du Système..println(ele.getAttribute("id")); " le résultat retourné est container au lieu de header. merci de me conseiller si ma compréhension de la relation est correcte ou non. si je veux utiliser xpth pour montrer la valeur de l'id du premier nœud enfant,comment dois-je modifier le codeVotre xpath
"//div[@id='container'][1]"
renvoie le premier div avec l'id du conteneur. Si il y a un seul c'est la même que"//div[@id='container']"
à tous les enfants/*
et le premier enfant/*[1]
. À cet effet, essayez:"//div[@id='container']/*[1]
Merci beaucoup pour les précisions. J'ai une meilleure compréhension sur l'expression xpath sujet. Plus de pratique nécessaires pour améliorer mes connaissances.
Content d'avoir pu aider. Veuillez considérer pour sélectionner la réponse comme valable que si elle a été ce que vous arr recherchez.
la balise div de ne pas avoir d'enfants dans ce cas. la div est un nœud avec un attribut 'id' qui a de la valeur 'header'
OriginalL'auteur hr_117
XPath se transforme en ceci:
Me faire tous les div éléments qui ont un id l'égalité des à conteneur.
Que pour l'obtention de la première etc, vous avez deux options.
De le transformer en un
.findElement()
- ce sera juste de retour de la première pour vous de toute façon.ou
Explicitement de le faire dans XPath, vous seriez à la recherche à:
pour le premier, pour le second, etc:
Puis XPath a un indexeur, appelé dernier, qui serait (vous l'aurez deviné) vous obtenir le dernier élément:
Vaut la peine de mentionner que XPath indexeurs commencera à partir de 1 pas 0 comme ils le font dans la plupart des langages de programmation.
Comme pour obtenir le parent "nœud", eh bien, vous pouvez utiliser parent:
Qui serait le div'parent direct.
Vous pouvez alors aller plus loin et dire que je veux le première *div* avec un id de conteneur, et je veux son parent:
Espère que ça aide!
driver.findElements(By.xpath("//div[@id='container'][1]"))
System.out.println(ele.getAttribute("id"));
il est retourné container au lieu de en-tête. Suis-je le faire correctement? Merci de me donner quelques commentaires.Vous êtes à la recherche pour
//div[@id='container']/div[id@='header']
.OriginalL'auteur Arran
Au lieu de
utilisation
OriginalL'auteur user3487861