Помещение целых в кавычки для xpath - PullRequest
0 голосов
/ 19 февраля 2019

Я отлаживал чужой код Selenium.У них был xpath что-то вроде td['6'].Это не удалось.Я использовал интуицию и изменил ее на td[6], что исправило ее.Тем не менее, td['6'] не дал ошибку, как я и думал.Он нашел элемент, но совершенно другой, чем без кавычек.

Так что я подумал: что означает на самом деле число в кавычках, например td['6']?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

td[predicate] означает:

вернуть первый td узел, для которого предикат true.

Каждый непустой string возвращает true, поэтому td['6'] выберет первый td узел, найденный в DOM.

td[6] - это сокращение для td[position()=6] выражения, которое означает:

return td, который является шестым дочерним элементом td типа. "

0 голосов
/ 19 февраля 2019

Спецификация XPath 1.0 гласит, что 'td' - это ось (например, дети) и нод-тест (имя тега TD), а все, что в квадратных скобках - Предикатное выражение , которое либо оценивается как логическое (истина или ложь), либо в особом случае числа, оцениваемого как позиционный фильтр набора узлов:

если результат не является числом, то результат будет конвертирован как при вызове логической функции.Таким образом, путь местоположения para [3] эквивалентен para [position () = 3].

case 1: число в качестве предиката

td[6] выбирает шестую дочернюю таблицу-элемент данных, так как число 6 оценивается как сокращение для предиката position()=6.

case 2: строка в кавычках в качестве предиката

td['6'] выбирает каждый дочерний элемент данных таблицы, так как строка '6' не является пустым или имеет ненулевую длину и, следовательно, оценивается как true (см. логическое преобразование ).Таким образом, набор узлов TD-элементов больше не фильтруется (потому что предикат всегда верен).

Я исследую и предоставлю онлайн-образец ..

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