XPath :: Отримати підписку на рідного брата


85

У мене є така структура HTML: Я намагаюся створити надійний метод для вилучення другого елемента дайджесту кольору, оскільки в 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>

Я намагаюся витягнути другий елемент td "Колірний дайджест", який має декодоване значення.

Я написав наступний xpath, але замість отримання другого я не отримую другого елемента td.

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

І коли я змінюю його на td [2] на td [1], я отримую обидва елементи.

Відповіді:


124

Ви повинні шукати другий tr, який має td, що дорівнює "Color Digest", тоді вам потрібно переглянути або наступний брат першого td у tr, або другий td.

Спробуйте наступне:

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

або

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

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


Я використовую Xpath Checker у Firefox
доповнення крапками з комою

я використовував це для тестування. xpathtester.com/saved/b452f721-556c-4e9b-9758-1910b0871d4a
james31rock

1
може перевірка xpath не працює? Я ніколи не користувався ним і не маю встановленого Firefox. У мене xpath повинен повертати лише другий елемент td, коли перший елемент td має "Color Digest"
james31rock

Якщо ви перевірите мій HTML, там є пробіл "Колірний дайджест", я спробував посилання, яке ви надіслали, і ви бачите, що обидва TD повертаються.
доповнення крапками з комою

1
Ах, я бачу, я збираюся змінити свою відповідь. Вибачте. Ви повинні шукати другий tr, який має td, що дорівнює "Color Digest", тоді вам потрібно переглянути або наступний брат першого td у tr, або другий td.
james31rock

6

Ви можете перейти до ідентифікації списку елементів за допомогою xPath:

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

Це дасть вам список двох елементів, ніж ви можете використовувати другий елемент як задуманий. Наприклад:

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

Тепер ви можете використовувати другий елемент як передбачуваний елемент, який є elements.get (1)


2

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

У Chrome (можливо і Safari) ви можете перевірити елемент, клацнути правою кнопкою миші тег, для якого потрібно отримати xpath, а потім скопіювати xpath, щоб вибрати цей елемент.


2
Так, я знаю, що функція полягає у повторенні цих елементів, а не просто для отримання, я хочу створити надійний підхід.
доповнення крапками з комою
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.