Найти тему

Локаторы в автотестах Selenium Intellij IDEA JAVA

Оглавление

Мы с вами уже научились настраивать среду для запуска тестов. Умеем выводить отчёты и нажимать на элементы, но так и не научились искать эти самые элементы. Эта статья как раз про локаторы, как же научиться правильно писать локатор, чтобы автотесты проходили успешно.

Поиск локаторов в консоли

Давайте перейдём на сайт OZON и попробуем определить локатор для какого-нибудь элемента.

  1. Перейдите на главную страницу сайта OZON.
  2. Нажмите клавишу F12 или используйте правую кнопку мыши, чтобы вызвать контекстное меню и выбрать пункт «Исследовать элемент».
  3. В открывшемся окне инструментов разработчика найдите нужный элемент на странице. Вы можете использовать различные способы поиска:
  • Поиск по XPath. Введите XPath-выражение в поле поиска и нажмите Enter.
  • Поиск по CSS-селектору. Введите CSS-селектор в поле поиска и нажмите Enter.
  • Поиск по имени тега. Введите имя тега в поле поиска и нажмите Enter.
  1. Когда вы найдёте нужный элемент, вы увидите его атрибуты и свойства. Среди них будет атрибут id или class, который можно использовать в качестве локатора.
  2. Запишите полученный локатор. Он будет использоваться в ваших тестах для взаимодействия с этим элементом.
-2

Найдём локатор, к примеру "Одежда и обувь".

-3

В Dom нас перенесёт на этот самый элемент

-4

Как можем заметить это ссылка под тегом "а", это очевидный знак уникальности элемента, её и будем использовать.

Переходим в вкладку Console и пишем следующий запрос:

$x("") - поиск по xpath элемента
$("") - поиск по css элемента

Для начала разберем разницу между css и xpath

Стандарты HTML и CSS, разработанные W3C, играют ключевую роль в создании веб-приложений. Они обеспечивают согласованность и удобство работы с кодом, упрощая его поддержку и обновление.

XPath — это мощный инструмент для навигации по дереву элементов DOM. Он позволяет точно определять элементы на странице, что особенно важно при автоматизации тестирования. Абсолютный XPath начинается с корневого элемента и указывает на конкретный элемент, в то время как относительный XPath используется для навигации по дереву элементов относительно текущего контекста.

CSS, в свою очередь, описывает внешний вид HTML-документов. Стили могут быть внешними (в отдельном файле .css) или внутренними (внутри HTML-документа). Внутренние стили могут быть описаны внутри тега <style> или применены как атрибут к конкретному элементу.

Хотя CSS может показаться проще в использовании, иногда он не позволяет точно определить элемент, в отличие от XPath. Это делает XPath универсальным инструментом для автоматизации тестирования веб-приложений.

Пишем локатор xpath

В нашем случае прописываем данные для элемента "Одежда и обувь".

-5

Из вашего описания следует, что вы нашли уникальный локатор для элемента на странице. Это означает, что при написании автоматических тестов вы можете использовать этот локатор для точного определения элемента и взаимодействия с ним.

Локатор состоит из нескольких частей:

  • Искомый тег — в вашем случае это тег а.
  • @href — название атрибута, который вы хотите использовать для идентификации элемента.
  • ‘/category/muzhskaya-odezhda-7542/’ — значение атрибута @href. Это конкретное значение, которое отличает данный элемент от других элементов с таким же тегом и атрибутом на странице.

Использование такого локатора гарантирует, что автоматический тест будет взаимодействовать именно с тем элементом, который вам нужен.

Если у вас возникнут дополнительные вопросы или потребуется дополнительная информация о написании XPath-выражений, пожалуйста, дайте знать. Мы готовы предоставить более подробные инструкции или примеры кода.

Пишем локатор CSS

Для css наш локатор будет выглядеть следующим образом

$("a[href='/category/muzhskaya-odezhda-7542/']")

Запись локаторов в наши тесты

Как уже было рассказано в нашей статье про PageObject, мы создаём отдельный класс под каждую страницу, чтобы легче было ориентироваться. Добавляем наш локатор и теперь класс будет выглядеть так:

-6

Давайте перейдём в Одежду и возьмём цену первого товара.

Локатор для одежды:

-7
$x("//a[@href='/category/muzhskaya-odezhda-7542/?sorting=score']")

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

-8

Структура Dom элементов

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

Пример локатора для цены товара:

//div[@class='block-name']/div[1]

Этот локатор найдёт первый элемент div внутри блока с классом block-name, который содержит цену товара.

-9

Поэтому ищем этот блок и в неём все карточки товара

-10

У нас вышло что карточек товара на 1 странице = 36

-11
$x("//div[@class='widget-search-result-container lk1']//div[@class='yj4 jy5']")

Нам нужна 1 карточка

$x("//div[@class='widget-search-result-container lk1']//div[@class='yj4 jy5'][1]")

Чтобы найти цену товара, вам нужно использовать следующий локатор:

//div[@class='widget-search-result-container lk1']//div[@class='yj4 jy5'][1]//div[@class='_33-a0']

Этот локатор находит первый элемент div с классом _33-a0, который является потомком элемента div с классом yj4 jy5, который, в свою очередь, является потомком элемента div с классом widget-search-result-container lk1.

Обратите внимание, что локатор //div[@class='yj4 jy5'] находит все 36 элементов div с классом yj4 jy5, но поскольку после него идёт [1], выбирается только первый элемент.

-12
div[@class=''l1k] - мы пропустили
  • [1] - означает что мы берём первый элемент из всего списка, первую карточку
  • //div[@class='_33-a0'] - элемент с ценой товара

Так выглядит наш PageObject:

-13

Так выглядит тест:

-14

Как итог мы получим такой результат:

-15

Если вывести отчёт в Allure мы можем убедиться, что цена первого товара равна 517р.

-16

Если в этой статье было что то не понятно. То скорее подписывайся и смотри предыдущие статьи, в них мы подробно разбираем все моменты, которые используем в данном тесте!

Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!

Обучение тестированию