Какой лучший и быстрый способ найти элемент с помощью webdriver? By.XPath или By.ID или что-нибудь еще? И почему?

Каков наилучший и быстрый способ найти элемент с помощью webdriver? By.XPath или By.ID или что-нибудь еще? И почему?

Я читал во многих местах, что XPath является правильным кандидатом, но просто не мог найти точной причины этого.

Ответ 1

Поиск элементов по идентификатору, как правило, будет самым быстрым вариантом, поскольку в корне он в конечном итоге вызывает document.getElementById(), который оптимизирован многими браузерами.

Поиск элементов XPath полезен для поиска элементов с использованием очень сложных селекторов и является наиболее гибкой стратегией выбора, но он может быть очень медленным, особенно в IE. В IE 6, 7 или 8 поиск XPath может быть на порядок медленнее, чем в Firefox. IE не содержит собственного решения XPath-over-HTML, поэтому проект должен использовать реализацию JavaScript XPath, а механизм JavaScript в устаревших версиях IE действительно намного медленнее.

Если вам нужно найти элемент с помощью сложного селектора, я обычно рекомендую использовать CSS Selectors, если это возможно. Это не так гибко, как XPath, но будет охватывать многие из тех же случаев, не демонстрируя экстремального снижения производительности в IE, которое может использовать XPath.

Ответ 2

Очевидно, By.id() быстрее по сравнению с By.xpath(), поскольку By.id() является быстрым. Но в By.xpath() потребуется время для прохождения.

Вывод: By.id() быстрее по сравнению с By.xpath()

Ответ 3

Более быстрый способ очевиден с помощью By.id(), но у вас также есть альтернатива, использующая By.name(), также она имеет такую ​​же скорость, как и By.id(). И cssSelector также использует идентификатор id, поэтому его эквивалент совпадает с поиском By.id() и By.name(). Основная причина использования xpath заключается в том, что каждый веб-элемент имеет уникальный путь, назначенный ему. Поэтому, когда один и тот же идентификатор, имя и имя класса разделяются двумя элементами, тогда xpath является опцией как уникальное решение.