В этом небольшом вводном руководстве разберемся с XPath, а также с его наиболее распространенными типами, операторами, узлами и функциями.
XPath или XML Path Language — язык запросов, используемый для навигации по XML-документу. XML — язык разметки, чем-то похожий на HTML, не выполняющий никаких действий, а просто служащий для описания и структурированного хранения каких-нибудь данных. Проще говоря — это куски информации, завернутые в теги, для получения которой разработчик пишет специальную программу. Чтобы такая программа нашла необходимые элементы, нужно проложить к ним путь. Этот путь называют XPath-выражение.
XPath применяется для перехода к любому необходимому нам тегу, атрибуту или текстовому блоку и используется в связке с такими технологиями, как XSLT, XQuery, XLink и XPointer. XPath можно использовать в индустрии разработки ПО — почти все языки программирования поддерживают его, — а также при тестировании программного обеспечения, в частности для разработки сценариев автоматизации в Selenium. Кроме всего прочего, он является рекомендуемым языком консорциума World Wide Web (W3C), поэтому с ним стоит разобраться. Сделать это лучше всего с практикующими специалистами, например, с преподавателями из школы наших партнеров Mate Academy.
Под узлами понимают вложенные теги, атрибуты и тексты, составляющие содержимое корневого элемента. От каждого вложенного тега могут отходить свои ветви. Элементы в дереве узлов имеют иерархические взаимоотношения друг с другом. Пример таких взаимоотношений показан на изображении ниже.
Существуют разные типы узлов XPath. Но прежде, чем их перечислить, напишем базовую программу XML, чтобы на ее примере объяснить все используемые здесь термины.
<SoftwareTestersList>
<softwareTester name="T1">
<State>Kiew</State>
<country>UA</country>
</softwareTester>
<softwareTester name="T2">
<State>Odessa</State>
<country>UA</country>
</softwareTester>
</SoftwareTestersList>
SoftwareTestersList». Для его выбора используется косая черта ‘/‘.Software Tester, State, Country.name» — это атрибутный узел тегов softwareTester. Для обозначения применяется значок «@».Kiew», «UA», «Odessa».<!... >..).Оси определяют отношение узлового набора по отношению к текущему узлу. Рассмотрим самые основные из них и поймем, как они могут работать, в нашем примере:
XPath self :: * или .child :: software tester...). Например: parent :: State и ../State.@). Например: attribute :: name или @name.
Мы с вами разобрали, что XPath ищет элементы на HTML или XML-страницах.
Для того чтобы добраться к искомому объекту, используются пути. Они являются наиболее полезным и широко используемым свойством XPath. Путь состоит из набора узлов XPath относительно его стартового (чаще всего корневого) элемента.
Есть два вида путей: абсолютный и относительный.
Абсолютным называется путь от корня документа. Он всегда начинается с косой черты “/”.
Корень документа всегда является узлом по умолчанию, то есть текущим полученным узлом или набором узлов, относительно которых рассчитывается следующий шаг.
Например:
<html>
<head>
<body>
<div class=”mainWrap”>
<h1> Основной заголовок</h1>
<p>абзац текста</p>
<div>Блок1</div>
<ul>
<li>пункт1</li>
<li>пункт2</li>
</ul>
</div>
<div class=”sideBar”>
<div>
<div>пустой блок</div>
<div>
<div>
<table border=”1”>
</body>
</html>
Из примера выше мы видим, что для того, чтобы добраться до тега (<li>пункт 1</li>), нам нужно, начиная с корня документа (<html>), посетить каждый дочерний элемент родителя.
В XPath это будет выглядеть так:
/html/body/div/ul/li[1]
Пример из жизни: есть семиэтажное здание. Чтобы попасть на седьмой этаж по лестнице, нам нужно последовательно посетить все этажи с первого по седьмой — /1/2/3/4/5/6/7. Это будет абсолютный путь.
Относительным называют путь от одного элемента (не обязательно от корневого) к другому. Чаще всего в таких случаях XPath-запрос начинают с «.//» или «//».
Символы «//», проставленные в начале запроса, возвращают полное множество потомков, являющихся дочерними для корня документа, то есть все элементы на текущей странице.
Например:
Чтобы добраться до тега (<li>пункт 1</li>), мы опустим все теги, находящиеся выше тега (<div>), и заменим их на «//». Также можем заменить всех предков тега (<li>) на «//», исключая тег (<div>).
Вот как это будет выглядеть в XPath:
//div//li[1]
Пример из жизни: есть семиэтажное здание. Нам нужно попасть с третьего на седьмой этаж, не посещая этажи четыре, пять, шесть (где живут наши недоброжелатели). Для этого можно воспользоваться лифтом и пропустить их. Наш путь будет выглядеть следующим образом: //3//7. А если нам придется подниматься по лестнице, то наш путь будет выглядеть так:
//3/4/5/6/7
Синтаксис языка запросов немного похож на обозначения, используемые в URL-адресах. XPath выражение — это не что иное, как путь к нужному нам элементу в дереве документа, где каждый уровень отделяется от другого косой чертой «/», а результатом его обработки может быть:
/html/body/div
Если применить к предыдущему участку HTML-кода, он вернет два узла элементов div, содержащиеся в элементе body.
/html/body/div or p
вернет значение true, так как в элементе body содержится элемент div.
/html/body/div/h1['Основной заголовок']
Вернет элемент h1 с текстом «Основной заголовок», содержащийся в первом элементе div.
Ниже перечислены подстановочные знаки, применяемые в XPath-выражениях.
(*) : выберет все узлы элементов контекстного узла (включая текст, комментарии, инструкции и узел атрибутов).(@ *) : выберет все узлы атрибутов контекстного узла.Node () : это выберет все узлы контекстного узла (включая пространства имен, текст, атрибуты, элементы, комментарии и инструкции).Предикаты в XPath
Предикаты используются как фильтры, ограничивающие узлы, которые выбраны выражением XPath. Каждый предикат преобразуется в логическое значение, истинное или ложное, если оно истинно для данного XPath, то этот узел будет выбран, если ложно, то — нет.
Предикаты всегда заключаются в квадратные скобки, например:
softwareTester [@ name = ”T2 ″]:
Этот пример выберет элемент <softwareTester> с атрибутом, равным T2.
XPath содержит стандартную библиотеку встроенных функций, необходимых для обработки узлов и работы с данными.
Их довольно много, поэтому перечислим некоторые из них:
1. Функции даты и времени:
current-date(). Возвращает текущую дату.current-dateTime(). Возвращает текущую дату и время.hours-from-time(time). Извлекает компонент часов из значения времени.dateTime(date, time). Объединяет указанную дату и время.days-from-duration(dayTimeDuration). Извлекает дневной компонент значения продолжительности дня.timezone-from-dateTime(dateTime). Извлекает компонент часового пояса значения даты и времени.2. Функции имен:
base-uri(). Возвращает значение базового URI контекстного узла.local-name(). Возвращает локальную часть имени контекстного узла.name(node). Возвращает имя узла в виде строки в лексической форме QName.3. Функции набора узлов:
avg(anyAtomicType_sequence). Возвращает среднее значение набора чисел или их продолжительности.count(item_sequence). Подсчитывает количество элементов в последовательности.error(). Вызывает ошибку.id(string_sequence). Находит элементы с заданными значениями атрибута ID.4. Числовые функции:
number(object). Возвращает число на основе переданного ему объекта.floor(aNumber). Возвращает число, равное аргументу, округленное в меньшую сторону до ближайшего целого числа.abs(numeric). Возвращает абсолютное значение заданного числа. Возвращает тот же тип, что и предоставленный аргумент.ceiling(aNumber). Возвращает число, равное аргументу, округленное до ближайшего целого числа.5. Строковые функции:
string(object). Преобразует объект в строку.compare(comparand1, comparand2). Сравнивает две строки с использованием параметров сортировки по умолчанию.lower-case(string). Изменяет символы в строке на нижний регистр.string(item). Возвращает строковое значение аргумента.Описания всех существующих ныне функций можно найти в спецификации W3 XPath.
Ниже приведем наиболее часто встречающиеся участки кода XPath, применяемые разработчиками для парсинга данных с веб-страниц:
//h1/text()
productName://h1[@class="productName"]/text()
span по классу://span[@class="price"]
title у тега button с классом addtocart_button://input[@class="addtocart_button"]/@title
//a/text()
url-значение атрибута href необходимой ссылки://a/@href
src рассматриваемого изображения://img/@src
following://h1[@class="produnctName"]//following::div/img/@src
div по счету://div[4]/img/@src
XPath довольно полезная вещь, широко применяемая при автоматизации тестирования. Он действует как локатор элементов. Чтобы найти определенный кусок данных на странице и выполнить над ним какое-либо действие, необходимо просто указать его XPath в целевом столбце сценария инструмента тестирования Selenium.
Для закрепления материала приводим несколько полезных ссылок на релевантные видеоролики по теме:
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…