selenium - написание xpath с использованием функции count - PullRequest
0 голосов
/ 17 октября 2018

Для такой HTML-страницы я пишу два оператора xpath для извлечения текста из элемента td.Сначала xpath должен получить позицию th-го элемента, которая соответствует моему требованию.

count(.//th[contains(., 'Header5')]/preceding-sibling::*)+1

Затем я помещаю значение счетчика, возвращенное выше, в этот xpath и получаю текст

.//tr[2]/td[**count**]

Как я могу объединить эти два xpath в один xpath и получить результат.Я пытался что-то вроде этого, но он всегда выбирает первый тд

.//tr[2]/td[count(.//th[contains(., 'Header5')]/preceding-sibling::*)+1]
(.//tr[2]/td)[count(.//th[contains(., 'Header5')]/preceding-sibling::*)+1]

Вот структура HTML

<thead>
    <th> Header1 </th>
    <th> Header2 </th>
    <th> Header3 </th>
    <th> Header4 </th>
    <th> Header5 </th>
    <th> Header6 </th>
</thead>
<tbody>
    <tr>
    <tr>
        <td> Cell1 </td>
        <td> Cell2 </td>
        <td> Cell3 </td>
        <td> Cell4 </td>
        <td> Cell5 </td>
        <td> Cell6 </td>
    </tr>
</tbody>

1 Ответ

0 голосов
/ 17 октября 2018

Это нужно сделать:

.//tr[2]/td[count(//th[contains(., 'Header5')]/preceding-sibling::th) + 1]

Обратите внимание, что /td[count(.//th)] означает количество th узлов, которые являются потомками из tdв то время как /td[count(//th)] означает количество th где угодно в DOM , поэтому будьте осторожны с контекстным узлом (точка)

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