воскресенье, 3 марта 2013 г.

xPath: идентификация элементов на web-форме

Язык запросов xPath служит для упрощения доступа к элементам web-формы, расположенным в DOM. Очень часто его используют в таких средствах автоматизации тестирования, как Selenium IDE и Selenium WebDriver.

Подробнее об xPath можно почитать здесь:
Удобный плагин для Chrome от Google, для формирования и проверки запросов xPath, XPath Helper
После установки достаточно нажать Shift + Ctrl + X, появится консоль запросов xPath. Проверьте, чтобы другие программы не использовали эту комбинацию клавиш.
При одновременно нажатых клавишах Shift + Ctrl и указании курсором мыши на элемент, XPath Helper сразу формирует наиболее удобный абсолютный xPath для него и подставляет в  консоль. Результаты поиска элементов по xPath отображаются в правой части консоли.

XPath Helper

* - обозначает любое имя или набор символов, @* - любой атрибут
$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 - текущий выбранный элемент страницы:

xPath structure