Почему нужно предпочитать использование CSS поверх XPath в IE?
Я работаю над приложением, которое совместимо только с IE7 и IE8. Я не знал, почему, но некоторые предложили использовать CSS поверх XPath при идентификации элементов в IE. Когда я посетил официальный сайт Selenium. Я прочитал сообщение
WebDriver по возможности использует собственные возможности XPath для браузера. В тех браузерах, которые не имеют поддержки родного XPath, мы предоставили свою собственную реализацию. Это может привести к неожиданному поведению, если вы не знаете о различиях в различных механизмах xpath.
Я хотел бы знать, где я могу найти различия в различных механизмах xpath и в каких ситуациях я должен использовать CSS и в которых XPath конкретно, если я использую IE. Благодарю.
- XSLT: как преобразовать XML-узел в строку
- Как вы выводите текущий путь элемента в XSLT?
- Получение имени элемента в XPATH
- xpath найти, если узел существует
- Использование Xpath с пространством имен по умолчанию в C #
- SelectSingleNode возвращает значение null для известного пути xml-узла с использованием XPath
- Как выбрать все листовые узлы с помощью выражения XPath?
- Найти местоположение узла с помощью xpath
- Кодирование выражений XPath с одиночными и двойными кавычками
- XPath: выберите всех следующих братьев и сестер, пока другой брат
- Как XPath обрабатывает пространства имен XML?
- Выберите родительский элемент известного элемента в Selenium
- Java: как найти элемент через строку xpath на org.w3c.dom.document
Согласно докладу Эшли Уилсона из лабораторий соуса :
Плюсы :
- Они быстрее
- Они более читабельны
- CSS – страtagsя размещения jQuery
- Никто не использует XPATH в любом случае!
Это немного устарело, однако вот цифры:
Лично я спорю о (2) -ном заявлении, я должен согласиться с остальными.
Минусы :
- Нет навигации «снизу вверх». XPath имеет
elem\..\another_elem
- Вливается ли 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