Блог LearnQA

Мифы о локаторах Selenium тестов

Привет, коллеги.
В этой статье предлагаем развеять несколько мифов о локаторах Selenium-тестов.

Миф 1. “id” - самый надежный локатор

На самом деле так могло бы быть. Но увы, иногда на одной странице может быть несколько элементов с одним и тем же id. Чаще всего такое может быть из-за особенностей шаблонизатора на данном проекте. В этом случае ни о какой уникальности и надежности локатора говорить не приходится.

Более того, с помощью CSS или XPath вполне можно осуществлять поиск элемента по id. Давайте посмотрим это на примере id, равного “some_id”:

Вот так локатор будет выглядеть на CSS: #some_id

А вот так на XPath: //*[@id=”some_id”]

В обоих случаях локатор не становится менее или более надежным в зависимости от типа локатора.

Миф 2. CSS-локаторы работают быстрее, чем XPath-локаторы

На самом деле это не миф и вполне может быть правдой. Вот только важность подобного выигрыша в скорости сильно преувеличена.

Давайте вспомним, как устроены Selenium-тесты. Наш код компилируется или интерпретируется и по сути превращается в последовательность http-запросов к Selenium-серверу. Скорость выполнения этих запросов зависит от инфраструктуры тестов. Если Selenium-сервер поднят локально и находится на той же машине, что и код тестов, это взаимодействие будет чуть быстрее. Но чаще всего Selenium-сервер запущен на другой машине, отвечающий за ферму браузеров и коммуникации происходят чуть дольше.

Помимо этого, сами браузеры тоже работают существенно время, рендеря (отрисовывая) сайт и его содержимое после открытия страницы. И там уже скорость работы сайта зависит от скорости коммуникации клиента и сервера сайта.

На фоне всего этого операции по поиску элементов по локаторам занимают менее 1% времени. И выигрыш даже в два раза - а на деле же он существенно меньше - не особо заметен.

Миф 3. Локаторы на CSS более стабильны, чем на XPath

Это тоже не так. Начнем с того, что локаторы обоих типов бывают относительные или абсолютные. Абсолютные - это когда описывается путь от самого верха HTML-документа (от тега html) до искомого элемента. Относительные - это когда мы стартуем от кого-то элемента внутри DOM.

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

Так что лучшей практикой считается как раз вдумчивое составление относительных локаторов. А они, в свою очередь, могут быть написаны как на CSS, так и на XPath.

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

А на этом все, спасибо за внимание.