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.