Как выбрать первый идентификатор из элемента кнопки в XPath? - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь вернуть первый элемент моего запроса XPath и веб-страницы и не уверен, почему это не работает в Google Chrome.Я пробовал различные варианты, но это было безуспешно.

Основной пример, который в моем случае возвращает:

INPUT: //button[@data-qtip='Next Page']/@id
OUTPUT: [id=​"button-1135-btnEl",id=​"button-1101-btnEl"]

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

INPUT: //button[@data-qtip='Next Page' and position() = 1]/@id
OUTPUT: [id=​"button-1135-btnEl",id=​"button-1101-btnEl"]
INPUT: //button[@data-qtip='Next Page']/@id[1]
OUTPUT: [id=​"button-1135-btnEl",id=​"button-1101-btnEl"]

Ответы [ 2 ]

5 голосов
/ 30 ноября 2011
//button[@data-qtip='Next Page']/@id[1]

Это один из самых часто задаваемых вопросов в XPath .

Как правило, вышеприведенное выражение не выбирает (только) один узел, как ожидалось.

Причина?

В спецификации W3C XPath сокращение // определено таким образом, что этот псевдооператор имеет более низкий приоритет, чем оператор XPath [].

Таким образом, любое выражение типа:

//SomeNode[1]

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

Когда мы хотим выбрать первый узел SomeNode в документе, мы должны переопределить приоритет оператора по умолчанию, используя скобки :

(//SomeNode)[1]

В этом конкретном случае используйте :

(//button[@data-qtip='Next Page']/@id)[1]
1 голос
/ 30 ноября 2011

Попробуйте, если следующая команда xpath работает для вас:

INPUT: (//button[@data-qtip='Next Page']/@id)[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...