Язык запросов xPath служит для упрощения доступа к элементам web-формы, расположенным в DOM. Очень часто его используют в таких средствах автоматизации тестирования, как Selenium IDE и Selenium WebDriver.
Подробнее об xPath можно почитать здесь:
- синтаксис и примеры: http://www.k-press.ru/cs/2001/2/XPath/XPath4.asp
- xPath Tutorial: http://www.w3schools.com/XPath/default.asp
- материал с Википедии: http://ru.wikipedia.org/wiki/XPath
Удобный плагин для Chrome от Google, для формирования и проверки запросов xPath, XPath Helper:
После установки достаточно нажать Shift + Ctrl + X, появится консоль запросов xPath. Проверьте, чтобы другие программы не использовали эту комбинацию клавиш.
При одновременно нажатых клавишах Shift + Ctrl и указании курсором мыши на элемент, XPath Helper сразу формирует наиболее удобный абсолютный xPath для него и подставляет в консоль. Результаты поиска элементов по xPath отображаются в правой части консоли.
* - обозначает любое имя или набор символов, @* - любой атрибут
$name - обращение к переменной, где name - имя переменной или параметра.
[ ] - дополнительные условия выборки
{ } - если применяется внутри тега другого языка (например HTML), то XSLT-процессор рассматривает содержимое фигурных скобок как XPath.
/ - определяет уровень дерева
Оси xPath
Оси xPath - это отношение расположения некоторых данных к текущему элементу в структуре HTML-документа.
Выделяют следующие оси:
Ось child:: - Возвращает множество потомков на один уровень ниже.
В сокращенном синтаксисе ось child:: просто опускают.
xpath=//td[@id='menu_0']/child::a
или так
xpath=//td[@id='menu_0']/a
Ось attribute:: - Возвращает множество атрибутов текущего элемента.
В сокращенном синтаксисе ось attribute:: - можно заменить на «@»
xpath=//td[attribute::id='menu_0']
или так
xpath=//td[@id='menu_0']
Ось self:: — Возвращает текущий элемент.
В сокращенном синтаксисе ось self:: - можно заменить на «.»
Ось parent:: - Возвращает предка на один уровень назад.
В сокращенном синтаксисе ось parent:: - можно заменить на «..»
xpath=//a[text()='Авто/Мото']/parent::td/following::td/a
или так
xpath=//a[text()='Авто/Мото']/../following::td/a
Ось descendant:: - Возвращает полное множество потомков.
В сокращенном синтаксисе ось descendant:: - можно заменить на «.//»
xpath=//td[@class='l-index-right']/descendant::div[@class='b-links-next']
или так
xpath=//td[@class='l-index-right']/.//div[@class='b-links-next']
Ось descendant-or-self:: - отличается от оси descendant тем, что вместе с множеством потомков возвращает и текущий элемент.
В сокращенном варианте ось descendant-or-self:: - можно заменить на «//»
xpath=//td[@class='l-index-right']/..//div[@class='b-links-next']
Ось ancestor:: - Возвращает множество предков.
xpath=//a[.='Букеты']/ancestor::td/@class
- xpath, по которому можно получить class первого td-предка тэга "Букеты".
Ось ancestor-or-self:: - отличается от оси ancestor тем, что вместе с множеством предков возвращает и текущий элемент.
Ось following:: - Возвращает множество элементов на уровне родителя текущего элемента (после родителя, не включая его) и все ниже них.
xpath=//div[@class='b-banner']/following::div/@class
- xpath, выбирающий class первого попавшегося div из элементов ниже div[@class='b-banner'].
Ось following-sibling:: - Возвращает множество элементов на том же уровне, что и текущий, принадлежащих родителям, следующих после родителя текущего.
xpath=//div[@class='b-banner']/following-sibling::div/@class
- xpath, выбирающий class первого попавшегося div из элементов одного уровня с div[@class='b-banner'], находящихся ниже него.
Ось preceding:: - Возвращает множество элементов на уровне родителя текущего элемента (до родителя, не включая его) и все ниже них.
xpath=//div[@class='b-foot']/preceding::table/@class
- xpath, выбирающий class первого попавшегося table из элементов выше div[@class='b-foot'].
Ось preceding-sibling:: - Возвращает множество элементов на том же уровне, что и текущий, принадлежащих родителям, следующих до родителя текущего.
xpath=//div[@class='b-foot']/preceding-sibling::table/@class
- xpath, выбирающий class первого попавшегося table из элементов одного уровня с div[@class='b-foot'], находящихся выше него.
Ось namespace:: - Возвращает множество имеющее пространство имён (то есть присутствует атрибут xmlns).
Графически оси хорошо представлены на схеме (http://technet.microsoft.com/ru-ru/subscriptions/hh264613.aspx), где Self - текущий выбранный элемент страницы: