Почему я должен когда-либо использовать селекторы CSS, а не XPath для автоматического тестирования?

Пожалуйста, помогите мне понять, почему использование CSS-селекторов даже вариант для автоматического тестирования. Я использовал инструмент Ghost Inspector на своем рабочем месте для создания множества автоматических тестов для наших вещей. Этот инструмент дает вам возможность использовать селекторы CSS для XPath. Зачем?

XPath НАСТОЛЬКО гораздо прочнее, чем CSS. CSS для любого конкретного пользовательского интерфейса может изменяться почти еженедельно в некоторых проектах / функциях. Это делает тесты чрезвычайно хрупкими и склонными к регулярным поломкам.

Это потому, что большинство новых авторов тестов не хотят изучать XPath и хотят придерживаться основ? Селекторы CSS выглядят красивее синтаксиса XPath? Пожалуйста, убедите меня. Благодарю.

2 ответа

Решение

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

Во-первых, никому не нужно убеждать вас, что селекторы лучше, потому что с чисто функциональной точки зрения они просто нет (и я говорю это как кто-то с золотым значком /questions/tagged/css-selectors и почти 1000 ответов). на вопросы с этим тегом, так что вы знаете, что я не предвзятый). Если вы чувствуете себя более комфортно с XPath, используйте его - с точки зрения возможностей и того, что вы можете сделать, XPath значительно превосходит его, там действительно нет конкурентов. И, как вы правильно сказали, производительность больше не является проблемой (если она когда-либо была).

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

С другой стороны, если вы пришли из XML/XSLT/XPath, замечательно, вы продолжаете использовать XPath, который вы знаете и любите1!

Да, Xpath более надежен, чем CSS, потому что он может вызывать определенный контент, содержащий функциональность.

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

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


1 В зависимости от того, к какой версии XPath вы привыкли.

Один из самых распространенных разговоров в сообществе Selenium - какая стратегия локатора лучше среди двух - Css или XPath по производительности. Сторонники CSS говорят, что он более читабелен и быстрее, в то время как сторонники XPath говорят, что он способен проходить через HTML DOM (в то время как CSS не может). При таком разделении, основанном на разных точках зрения, трудно определить наилучший подход для вас и ваших тестов для начинающих. Вот некоторые выдержки из экспертов отрасли:

ElementalSelenium_DataTables

Результаты с поиском элементов по идентификатору и классу:

Browser                 | CSS           | XPath
----------------------------------------------------
Internet Explorer 8     | 23 seconds    | 22 seconds
Chrome 31               | 17 seconds    | 16 seconds
Firefox 26              | 22 seconds    | 22 seconds
Opera 12                | 17 seconds    | 20 seconds
Safari 5                | 18 seconds    | 18 seconds

Поиск элементов путем обхода:

Browser                 | CSS           | XPath
----------------------------------------------------
Internet Explorer 8     | not supported | 29 seconds
Chrome 31               | 24 seconds    | 26 seconds
Firefox 26              | 27 seconds    | 27 seconds
Opera 12                | 25 seconds    | 25 seconds
Safari 5                | 23 seconds    | 22 seconds

Следующие были на вынос:

  • Для начала, нет никакой разницы в производительности между XPath и CSS.
  • Обход DOM в старых браузерах, таких как IE8, не работает с CSS, но подходит для XPath. И XPath может подниматься по DOM (например, от дочернего к родительскому), тогда как CSS может проходить только по DOM (например, от родительского к дочернему). Однако невозможность обходить DOM с помощью CSS в старых браузерах не обязательно является плохой вещью, поскольку это скорее показатель того, что ваша страница имеет плохой дизайн и может извлечь пользу из некоторой полезной разметки.
  • Аргумент в пользу CSS заключается в том, что они более читабельны, кратки и кратки, хотя это субъективный вызов.

    • Бен Бертон упоминает, что вы должны использовать CSS, потому что именно так создаются приложения. Это облегчает написание тестов, их обсуждение и помощь в поддержке других.

    • Адам Гучер говорит, что должен принять более гибридный подход - сначала сосредоточиться на идентификаторах, затем на CSS, и использовать XPath только тогда, когда вам это нужно (например, прогуливаясь по DOM), и что XPath всегда будет более мощным для продвинутых локаторов.

Заключение

Так что это сложный вызов. Особенно сейчас, когда мы осознаем, что выбор не зависит от производительности, как это было раньше. Выбор не такой постоянный, как выбор языка программирования, и если вы используете полезную абстракцию (например, объекты страницы), то использование гибридного подхода легко реализовать.

пустяки

Другие вопросы по тегам