XPath :: Podążaj za rodzeństwem


85

Mam następującą strukturę HTML: próbuję zbudować solidną metodę wyodrębniania drugiego elementu skrótu koloru, ponieważ będzie wiele takich tagów w DOM.

<table>
  <tbody>
    <tr bgcolor="#AAAAAA">
    <tr>
    <tr>
    <tr>
    <tr>
      <td>Color Digest </td>
      <td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td>
    </tr>
    <tr>
      <td>Color Digest </td>
      <td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, </td>
    </tr>
  </tbody>
</table>

Próbuję wyodrębnić drugi element td „Color Digest”, który ma zdekodowaną wartość.

Napisałem następującą ścieżkę xpath, ale zamiast uzyskać drugą, nie otrzymuję drugiego elementu td.

//td[text() = ' Color Digest ']/following-sibling::td[2]

A kiedy zmieniam to na td [2] na td [1], otrzymuję oba elementy.

Odpowiedzi:


124

Powinieneś szukać drugiego tr, którego td równa się 'Color Digest', a następnie musisz spojrzeć na następne rodzeństwo pierwszego td w tr lub drugie td.

Spróbuj wykonać następujące czynności:

//tr[td='Color Digest'][2]/td/following-sibling::td[1]

lub

//tr[td='Color Digest'][2]/td[2]

http://www.xpathtester.com/saved/76bb0bca-1896-43b7-8312-54f924a98a89


Używam Xpath Checker w przeglądarce Firefox
dodaj średniki


1
może sprawdzanie xpath nie działa? Nigdy go nie używałem i nie mam zainstalowanego programu Firefox. XPath, który mam, powinien zwracać tylko drugi element td, gdy pierwszy element td ma „Color Digest”
james31rock

Jeśli sprawdzisz mój kod HTML, jest tam Space "Color Digest". Wypróbowałem łącze, które wysłałeś i widzisz, że oba TD są zwracane.
dodaj średniki

1
Ach, rozumiem, zmienię swoją odpowiedź. Przepraszam. Powinieneś szukać drugiego tr, którego td równa się 'Color Digest', a następnie musisz spojrzeć na następne rodzeństwo pierwszego td w tr lub drugie td.
james31rock

6

Możesz przejść do identyfikacji listy elementów za pomocą xPath:

//td[text() = ' Color Digest ']/following-sibling::td[1]

W ten sposób otrzymasz listę dwóch elementów, a następnie możesz użyć drugiego elementu jako zamierzonego. Na przykład:

List<WebElement> elements = driver.findElements(By.xpath("//td[text() = ' Color Digest ']/following-sibling::td[1]"))

Teraz możesz użyć drugiego elementu jako zamierzonego elementu, czyli elementów.get (1)


2

/html/body/table/tbody/tr[9]/td[1]

W przeglądarce Chrome (prawdopodobnie również Safari) możesz sprawdzić element, a następnie kliknąć prawym przyciskiem myszy tag, dla którego chcesz uzyskać ścieżkę xpath, a następnie skopiować ścieżkę xpath, aby wybrać ten element.


2
Tak, wiem, że funkcja polega na powtarzaniu tych elementów, a nie tylko na jeden, chcę zbudować solidne podejście.
dodaj średniki
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.