ищите (Xpath), затем нажимаете НАД и СЛЕДУЮЩУЮ ячейку - PullRequest
0 голосов
/ 19 мая 2019

Мне нужно было найти какой-нибудь стиль, используя Xpath, затем я должен был щелкнуть выше строки с другой ячейкой (другой tr, другой td)


<tbody>
<tr>
    <td>Random Number</td>
    <td><a>Random Title</a></td>
</tr>
<tr>
    <td>Random Number</td>
    <td><a>Random Title</a></td>
</tr>
<tr>
    <td>Random Number</td>
    <td><a>Random Title</a></td>   << 2.then go ABOVE lines and .click() NEXT td
</tr>
<tr>
    <td><em style=color:red>Random Number</em></td>   << 1. Had to find this 
    <td><a>Random Title</a></td>
</tr>
</tbody>

Я пробовал как приведенный ниже код, но это не удалось.

driver.find_element_by_xpath(
    "//tbody//tr[last()-1]//td//em[@style='color:red']//em"
).click()

1 Ответ

0 голосов
/ 19 мая 2019

Вот xpath.

//tr[td/em[@style='color:red']]/preceding-sibling::tr[1]/td[2]/a

Вот объяснение xpath, которое я получил выше.Позвольте мне разделить xpath на 4 части

  • найти ячейку, содержащую ссылку (в данном случае это стиль)

    // td / em [@style= 'color: red']

  • нахождение строки, содержащей вышеупомянутый td (мы нацеливаемся на строку, поэтому мы должны удалить // в указанном выше xpath

    // tr [td / em [@ style = 'color: red']] << --- это сделает ваш первый шаг в миссии </p>

  • поиск предыдущей строки (предыдущий брат найдет все предыдущие элементы на том же уровне текущего элемента, поэтому мы должны отфильтровать нужные элементы с помощью ::desired_tag, в данном случае это строка, поэтому мы использовали preceding-sibling::tr.

    // tr [td / em [@ style = 'color: red']] / предшествующий брат :: tr

    Но когда вы говорите preceding-sibling::tr, он будет фильтроватьвсе предыдущие строки, поэтому добавляется [1], так как мы хотим немедленную предыдущую строку в этом случае. Если вы хотите вторую предыдущую строку, то вы должны добавить [2].

    // tr [td/ эм [@ стиль = 'цвет: красный']] / доceding-sibling :: tr [1]

  • поиск целевой ссылки (поскольку вы находитесь в нужном ряду, теперь вы можете просто перейти по ссылке)

    // tr [td / em [@ style = 'color: red']] / предыдущий брат :: tr [1] / td [2] / a

Примечание. Ссылочные узлы в качестве элементов для лучшего понимания в приведенном выше объяснении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...