Afina

Скачать приложение

AppleWindows
RU

Обучение XPath с Примерами

Работа с Selector Engine в Afina

Selector Engine — центральный хаб таргетинга элементов в Afina. Это то место, где каждый селектор, запрос по атрибуту и совпадение по тексту находят свой дом. Пользователь получает удобный опыт: точно нацеливаться на кнопки, поля ввода, ссылки, текстовые блоки и запускать скрипты, которые кликают, наводятся и извлекают данные прямо со страницы. Кроме того, движок отвечает за надёжное управление запросами по классам, фильтрами по атрибутам, правилами текстового содержимого и данными селекторов, привязанными к каждому скрипту.

Когда запросы загружены в систему, редактор скриптов показывает весь поток на экране. Главное удобство: можно отслеживать каждый поиск, за секунды находить нужный селектор по соответствующей метке и запускать действия поиска сразу для множества скриптов в один клик.

Преимущества Selector Engine

  • В Selector Engine доступен широкий набор шаблонов запросов под любую бизнес-задачу.
  • Пользователи настраивают каждый поиск через нужные совпадения по классу, атрибуту и тексту.
  • Сценарии автоматизации без труда обращаются к результату через ссылку на сохранённую переменную.
  • Движок поддерживает как одиночные запросы по атрибуту, так и полноценные пайплайны с несколькими условиями в любой момент.
  • Любой пользователь получает удобный опыт построения логики селекторов с уникальной конфигурацией.

После сохранения запроса только что собранный поиск встаёт в общий список на канвасе скрипта. С этого момента можно соединять запросы со скриптами, редактировать каждое совпадение, привязывать поиск к пайплайну, помечать старые селекторы на чистку, цеплять нужный запрос к рабочему процессу и отправлять скрипт в задачи автоматизации. Таким образом, каждый только что собранный XPath сразу готов к работе.

Поиск по классу

Использовать XPath на основе классов в Afina есть масса причин. Во-первых, это даёт отличную скорость для свежих селекторов. Во-вторых, можно опереться на надёжность заранее подготовленных имён классов. Шаблон отлично подходит для настройки рабочего окружения, развёртывания большого пакета поисков элементов сразу или восстановления известного рабочего потока селекторов после изменений на странице.

Самый частый сценарий — поиск элемента по значению атрибута class. Конструкция contains(@class, "...") обрабатывает частичные совпадения, а конструкция not(...) исключает нежелательные классы из результата.

<div class="style_taskCard style_box"></div>
<div class="style_taskCard style_disable"></div>
<div class="style_taskCard style_box"></div>
//div[contains(@class, "style_taskCard")][not(contains(@class, "style_disable"))]

Кроме того, мульти-классовые запросы дают бесперебойный доступ к точечным совпадениям. Пользователь подбирает имена классов и складывает их в квадратные скобки. Остальное платформа берёт на себя.

//div[contains(@class, "style_taskCard")][contains(@class, "style_active")]

Поиск по атрибуту или тексту

Под разные бизнес-задачи доступны разные сценарии селекторов. Пользователь может закидывать одно совпадение по классу за раз или сцеплять стек проверок атрибутов в одном рабочем процессе. Для точных совпадений берётся конструкция @attribute="value". Для текстового содержимого конструкция contains(text(), "...") обрабатывает частичные совпадения, а text()="..." — точные.

Перед тем как запрос сработает, пользователю стоит убедиться, что целевой элемент больше не задействован в активной задаче, скрипте или текущем рабочем процессе. Причина простая: операция селектора утаскивает связанные ссылки в скриптах, задачи, состояние страницы и историю работы вместе с результатом. Так что незапланированный селектор может стоить лишних потерь.

<div data-role="admin"></div>
<button>Continue</button>
<a href="/en/auth/login">Login</a>
//div[@data-role="admin"]
//button[contains(text(), "Continue")]
//a[contains(@href, "/auth/login")]

С другой стороны, точное совпадение — не всегда правильный шаг. Многие пользователи предпочитают сохранить старое частичное совпадение, поменять ему правило, сменить имя атрибута или переключить поиск на свежую комбинацию. Плюс в том, что исходный запрос просто остаётся на скамейке запасных, и никакие данные не уходят навсегда.

Рекомендации и сохранённые шаблоны

Каждый XPath-запрос в Afina способен нести объёмный набор данных по селектору. Эти данные — ровно то, к чему обращаются скрипты и задачи автоматизации во время работы. К примеру, запросы по классам, совпадения по атрибутам, правила текстового содержимого, поиск по точным значениям, поиск по пользовательским атрибутам и любые другие параметры, которые у каждого элемента свои.

Самое ценное в этой функциональности — переиспользование. Один XPath можно применять везде и получать одинаково стабильные результаты. Каждый скрипт подставляет своё совпадение, когда вызов доходит до шага поиска. Вместо клонирования запроса под каждый скрипт пользователь просто грамотно готовит переменную. Таким образом, автоматизация становится гибче.

Кроме того, Afina предлагает два варианта таргетинга элементов: partial match через contains(...) и exact match через @attribute="value" или text()="...". Partial match зарезервирован под содержимое, которое может слегка меняться от рендера к рендеру страницы. Exact match зарезервирован под содержимое, которое стабильно по всему сайту. Например, надписи на кнопках, пункты меню, атрибуты ролей, пользовательские data-атрибуты и любые другие токены, на которых пользователь хочет закрепить скрипт.

Оба вида запросов добираются до скриптов через одну и ту же конструкцию XPath. Функция отлично подходит для подвязки сотни скриптов к одному и тому же поиску за один заход. Этим возможности не ограничиваются. Пользователи могут привязывать запрос к плановым окнам очистки или сохранять снапшот перед серьёзными изменениями.