Привет, коллеги.
В этой статье предлагаем развеять несколько мифов о локаторах 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.
Само собой, это не все мифы о локаторах. Возможно, в одной из следующих статей мы продолжим говорить о мифах или соберем подборку правил, рассказывающих когда какие локаторы стоит использовать.
А на этом все, спасибо за внимание.
В этой статье предлагаем развеять несколько мифов о локаторах 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.
Само собой, это не все мифы о локаторах. Возможно, в одной из следующих статей мы продолжим говорить о мифах или соберем подборку правил, рассказывающих когда какие локаторы стоит использовать.
А на этом все, спасибо за внимание.