Xpath selector, выберите элемент в зависимости от innertext его потомков - PullRequest
0 голосов
/ 10 января 2019

У меня есть этот HTML:

<tbody>
    <tr id="1">
        <td>foo faa</td>
        <td>faa fii</td>
        <td>foo faa</td>
        <td>faa fuu</td>
    </tr>
    <tr id="2">
        <td>foo fuu</td>
        <td>fyy fuu</td>
        <td>foo foo</td>
        <td>fuu fii</td>
    </tr>
    <tr id="3">
        <td>fuu faa</td>
        <td>fii fuu</td>
        <td>fuu fuu</td>
        <td>fyy fee</td>
    </tr>
    <tr id="4">
        <td>foo foo</td>
        <td>fee faa</td>
        <td>fee fyy</td>
        <td>foo fuu</td>
    </tr>
</tbody>

Элементы td в моем примере содержат два слова, но в моем реальном случае элементы td могут содержать больше слов. И tr элементов может содержать более 4 td дочерних элементов.

Я хочу выбрать tr элемент (ов) в зависимости от innerText его потомков. Я хочу иметь возможность искать несколько значений.

Будь примером:

  • если я буду искать "fuu" и "foo" и "fii", ожидаемый результат xpath должен быть элементами tr с id 1 и 2.

  • если я буду искать "fuu" и "fii", ожидаемый результат xpath должен быть элементами tr с id 1, 2 и 3.

  • если я ищу только "fee", ожидаемый результат xpath должен быть элементом tr с id 3 и 4.

Я пробовал это:

//tr[*[contains(text(), 'fuu')] and *[contains(text(), 'foo')] and *[contains(text(), 'fii')]]

Его работа, как и ожидалось (http://xpather.com/Tdg5OGr2). Но, может быть, существует более общее / правильное решение, есть идеи у кого-нибудь? Если я хочу найти по примеру десять слов, xpath станет действительно большим x)

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