2011-01-06 12 views
19
WebElement body = browser.findElement(By.xpath("//body")); 

body.findElement(By.xpath("")); // I want to get all child elements 
           // inside body, but nothing deeper. 

Przykładowy dokument.Uzyskaj wszystkie bezpośrednie dzieci i nic głębszego:

<html> 
    <body> 
    <div> 
    </div> 
    <span> 
     <table> 
     </table> 
    </span> 
    </body> 
</html> 

Oczekiwany wynik jest div i span. Nie mam kontroli nad dokumentami i różnią się one znacznie.

Odpowiedz

23

("*") zawiera wszystkie elementy podrzędne węzła kontekstu. Więc używać:

body.findElement(By.xpath("*")); 
+1

Ok. Usuwanie komentarzy ... –

6
/html/body/* 

Wybiera tylko bezpośrednie elementy podrzędne z body.

Pamiętaj, że jeśli skopiujesz wszystkie wybrane węzły, skopiujesz również ich zawartość. Tak więc, jeśli wykonasz copy-of, table, zostanie również utworzony wynikowy dokument.

Polecam również zapoznać się z podstawami co najmniej XPath, zadajesz zbyt wiele podobnych pytań.

+0

+1 Prawidłowa odpowiedź. Napisałeś: * nodeset będzie zawierał również elementy podrzędne *. To jest złe lub nie jest jasne twoje myśli. Myślę, że możesz to usunąć bez zagubienia. –

+0

@Alejandro, tak, to nie jest dobre sformułowanie, nie potrafię tego poprawnie wymówić. Jak byś to powiedział? – Flack

+1

Może chciałeś powiedzieć coś w stylu: * Pamiętaj, że jeśli skopiujesz wszystkie wybrane węzły, kopiujesz także ich zawartość. * –

4

Oto kolejny sposób, aby uzyskać bezpośrednie dzieci elementu:

element.findElement(By.xpath("./*")); 
Powiązane problemy