XPath (XML Path Language) — язык запросов к элементам XML или XHTML
документа, реализующий навигацию по DOM. XPath предназначен для
использования другими спецификациями, такими как XSL Transformations
(XSLT) и XML Pointer Language (XPointer).
WebDriver предоставляет несколько способ поиска элементов. Идентификация поиска осуществляется при помощи класса
By. Одним из вариантов поиска
By является
xpath, принимающий в качестве параметра строку, представляющую собой xpath-запрос:
driver.findElement(By.xpath("//input[@id='login']"));
Будьте внимательны, используя xpath. Selenium при построении
xpath-запроса использует стандартные обозначения — поиск начинается с
«//», т.е. будет искать по DOM-дереву всего документа, а не только среди
потомков текущего узла. Поэтому если вы выстраиваете поисковые запросы в
цепочку, то используйте «.//» для того, чтобы ограничить поиск среди
потомков элемента.
// найдет первый элемент a с классом "link" на странице:
driver.findElement(By.id("some-id")).findElement(By.xpath("a[@class='link']"));
// найдет первый элемент a с классом "link" среди потомков элемента с id="some-id":
driver.findElement(By.id("some-id")).findElement(By.xpath(".//a[@class='link']"));
Если критериям поиска удовлетворяет несколько элементов, результатом выполнения
findElement будет первый из них. Если же элемент не найден, будет выдано исключение
NoSuchElementException.
Некоторые HTML элементы не нуждаются в явном указании атрибутов
потому, что они имеют какое-то стандартное значение по умолчанию.
Основное правило при использовании xpath — НЕ полагайтесь на то, что
XPath-запрос обнаружит такой неявный атрибут.
Для браузеров, в которых встроенная поддержка XPath отсутствует,
разработана собственная реализация поиска по xpath. Однако, в некоторых
случаях, это может приводить к неожиданным результатам.
| Driver |
Встроенная поддержка XPath |
| HtmlUnitDriver |
Yes |
| InternetExplorerDriver |
No |
| FirefoxDriver |
Yes |
Скажу пару слов об инструментальных средствах XPath, которые могут
пригодиться в ходе работы. Они позволяют отлаживать XPath-выражения и
помогают при создании и проверке XPath. Их использование значительно
облегчает написание тестов, в которых используется поиск элементов по
xpath. Так как поле нашей деятельности — это тестирование сайтов и
web-приложений, то и речь пойдет о поддержке XPath в браузерах:
- Chrome xPath Viewer. Осуществляет поиск DOM элементов на
текущей странице с заданными выражениями XPath и CSS селекторами. При
наведении на найденный результат в списке подсвечивает элемент на
странице. Щелчок правой кнопкой мыши на элементе возвращает абсолютное
XPath выражение.
Преимущества:
— достаточно прост в обращении;
— поддержка CSS.
Недостатки:
— когда xPath Viewer активен нет возможности вызвать контекстное меню для элемента правой кнопкой мыши;
— предлагаемый xpath элемента строится только по тегам и позициям, не учитывая id;
— нет поддержки svg-контента на странице.
- Mozilla Firefox XPath Checker. Интерактивный редактор
выражений XPath. Запускается из контекстного меню командой ‘View XPath’.
Динамически обновляет результаты при редактировании запроса.
Преимущества:
— генерируемый xpath элементов строится оптимальным образом, используя id элементов;
— успешно работает с svg-контентом и т.п. за счет поддержки различных namespaces.
Недостатки:
— необходимо закрывать и открывать XPath Checker, чтобы получить xpath нового элемента.
— визуальное отображение найденных элементов в результатах — громоздко и бесполезно.
- Mozilla FirePath. FirePath является расширением для
Firebug, которое добавляет инструменты для редактирования, проверки и
создания выражения XPath, CSS селекторов и селекторов JQuery.
Преимущества:
— генерируемый xpath элементов строится оптимальным образом, используя id элементов;
— поддержка работы с различными namespaces;
— отображение результатов в Firebug, в DOM-модели документа;
— подсвечивание результатов непосредственно на странице.
Синтаксис и правила построения xpath-запросов описаны в статье
Введение в XPath (часть 2). Основы построения запросов