Почему нужно предпочитать использование CSS поверх XPath в IE?

Я работаю над приложением, которое совместимо только с IE7 и IE8. Я не знал, почему, но некоторые предложили использовать CSS поверх XPath при идентификации элементов в IE. Когда я посетил официальный сайт Selenium. Я прочитал сообщение

WebDriver по возможности использует собственные возможности XPath для браузера. В тех браузерах, которые не имеют поддержки родного XPath, мы предоставили свою собственную реализацию. Это может привести к неожиданному поведению, если вы не знаете о различиях в различных механизмах xpath.

Я хотел бы знать, где я могу найти различия в различных механизмах xpath и в каких ситуациях я должен использовать CSS и в которых XPath конкретно, если я использую IE. Благодарю.

Согласно докладу Эшли Уилсона из лабораторий соуса :

Плюсы :

  1. Они быстрее
  2. Они более читабельны
  3. CSS – страtagsя размещения jQuery
  4. Никто не использует XPATH в любом случае!

Это немного устарело, однако вот цифры:

изображение из веб-сайта причины лаборатории

Лично я спорю о (2) -ном заявлении, я должен согласиться с остальными.

Минусы :

  1. Нет навигации «снизу вверх». XPath имеет elem\..\another_elem
  2. Вливается ли Sizzle? Или используется синтаксический анализатор CSS браузера? Зависит от браузера, и есть несоответствия.

Самой большой причиной для выбора селекторов CSS в XPath в IE является производительность. IE не предоставляет собственный вариант XPath-over-HTML, как Firefox и Chrome. Тем не менее, он обеспечивает собственный механизм селектора CSS, который всегда будет быстрее, чем реализация JavaScript-only XPath, используемая в IE-драйвере. И сравнение производительности даже не близко. Я видел, что он измерял на порядок меньше для локаторов XPath, чем селектор CSS (хотя я не могу найти цитату в данный момент). Это особенно верно в версиях IE до 9, где движок IE JavaScript был значительно медленнее, чем движок JavaScript Chakra, представленный в 32-разрядном IE9.

Использование CSS-локатора – лучший вариант не только для IE, но и для FF и Chrome. Кроме того, xpath всегда худший выбор, потому что ему нужно разобрать всю страницу, чтобы найти простой элемент, поэтому, если вам нужна производительность в тестах, и вы можете избежать этого, просто сделайте это.

Кроме того, если вы используете pageObjects, я настоятельно рекомендую вам использовать cacheLookup, поэтому элемент будет расположен только один раз:

 @CacheLookup @FindBy(id="doLogin") private WebElement loginButton; 

Лично я делаю следующее:

  • Если элемент имеет class css, используйте этот локатор
  • Если элемент имеет имя или идентификатор, используйте этот локатор
  • Если ни одно из указанных выше не присутствует, и вы не можете использовать linkText или другой локатор, перейдите для xpath.

Бревити и Ясность – другие причины, помимо скорости.

В дополнение к скорости, я нахожу, что css обычно короче и чище и легче читать. Например:

XPath:

  //ol[@class='choice-group'//li//label//input 

против

CSS:

  css=ol.choices-group li label input 
  • Selenium WebDriver : как нажимать на элементы в SVG с помощью XPath
  • Преобразование JSON в XML в Java
  • Как использовать XPath в документах xml, имеющих пространство имен по умолчанию
  • Как преобразовать строку в верхний или нижний регистр с помощью XSLT?
  • Существует ли XSLT-элемент?
  • Анализ XML с помощью XPath в Java
  • Использование XPath, как выбрать узел на основе его текстового содержимого и значения атрибута?
  • xmllint не может правильно запросить с помощью xpath
  • XPath для выбора элемента по значению атрибута
  • Получить XPath для XElement?
  • Как разбирать XML в Bash?
  • Давайте будем гением компьютера.