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). Основы построения запросов
Такой вопрос, если пример с Кинопоиском, надо забрать со страницы только положительные отзывы, а например любые поиски ищут только первые найденные теги, что в Xpath, что в cssSelector, как сделать, чтобы искало все и потом выбрать какой нибудь из них? спасибо за ответ заранее)
какие любые поиски? что вы конкретно делаете?