xpath и оператор всегда возвращают true - PullRequest
0 голосов
/ 27 февраля 2020
"//a[contains(@data-testid,'actionLink')] | //a[contains(@aria-pressed,'false')]"

это возвращает 15

"//a[contains(@data-testid,'actionLink')] or //a[contains(@aria-pressed,'false')]"

это возвращает true

Но я хочу использовать оператор AND.

"//a[contains(@data-testid,'actionLink')] and //a[contains(@aria-pressed,'false')]"

возвращает true, но мне нужно целое число значение.

Согласно это ответ и есть и. как я могу получить целое число?

HTML код:

<a aria-pressed="false" class=" _6a-y _3l2t  _18vj" data-testid="UFI2ReactionLink" href="#" role="button" tabindex="-1"><i alt="" class="_6rk2 img sp_gFJy5OP1MUR sx_ee42f4"></i>Like</a>

1 Ответ

1 голос
/ 27 февраля 2020

Просто чтобы прояснить ситуацию | не является или, это объединение и возвращает набор результатов.
Вы комбинируете свои наборы результатов для "//a[contains(@data-testid,'actionLink')] с набором результатов для //a[contains(@aria-pressed,'false')]".

Причина, по которой вы получаете логический результат, заключается в том, что именно так работают логические операторы (они дают логический ответ на два условия, для списков узлов это будет верно для непустых и ложно для пустых списков).

Если вы хотите получить такие узлы, которые, как вам кажется, вам нужны, вы должны написать свой запрос таким образом, чтобы вы соответствовали a тегам, где фильтр содержит ваше комбинированное сравнение:

"//a[contains(@data-testid,'actionLink') and contains(@aria-pressed,'false')]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...