Когда Происходит Сбой Относительного Xpath? Селеновый локатор Xpath надежен?

#selenium #xpath #findelement

Вопрос:

Я провожу автоматические тесты. И я использую SelectorHub для поиска элементов на веб-сайте. В некоторых случаях я получаю очень длинный относительный Xpath, как вы видите ниже:

 //body/div[@id='app']/div[@class='...']/div[@role='...']/div[@class='...']/div[@class='...']/div[@class='...']/div/div/div[@class='']/textarea"));  

Как я правильно понял, он потерпит неудачу, если изменения на веб-сайте изменятся в будущем, потому что на нем слишком много «DIV». Почему же тогда говорится, что относительный Xpath надежен? Я не мог создать более короткий путь вручную, чтобы найти надежный путь.

Ответ №1:

Любой XPath, который работает сегодня на определенной HTML-странице H1, может дать или не дать тот же результат при применении (в будущем) к другой HTML-странице H2. Если вы хотите, чтобы у него было больше шансов вернуть тот же результат, то вы хотите свести к минимуму его зависимости, и, в частности, вы хотите избежать зависимости от свойств H1, которые с наибольшей вероятностью изменятся. Это, конечно, полностью субъективно. Можно сказать, что чем длиннее выражение вашего пути, тем больше у него зависимостей (то есть тем больше изменений, которые могут привести к его нарушению). Но это не универсально верно: выражение (//*)[842] , вероятно, является самым коротким выражением XPath для поиска определенного элемента, но оно также очень хрупкое: оно может сломаться, если HTML изменится. Выражения, использующие id атрибуты (например, //p[@id='Introduction'] часто считаются достаточно стабильными, но они также ломаются, если значения идентификаторов меняются.

Суть в том, что это полностью субъективно. Написание выражений XPath, устойчивых к изменениям в содержимом HTML, — это искусство, а не наука. Это можно сделать, только прочитав мысли человека, который разработал HTML-страницу.