XPath отличается в IE и Firefox.Зачем? - PullRequest
4 голосов
/ 17 июня 2011

Я использовал Firebug's Inspect Element для захвата XPath на веб-странице, и он дал мне что-то вроде:

//*[@id="Search_Fields_profile_docno_input"]

Я использовал технику Bookmarklets в IE для захвата XPath того же объекта, и я получил что-то вроде:

//INPUT[@id='Search_Fields_profile_docno_input']

Обратите внимание, что у первого нет INPUT , вместо него есть звездочка (*). Почему я получаю разные выражения XPath? Имеет ли значение, какой я использую для своих тестов, например:

Selenium.Click(//*[@id="Search_Fields_profile_docno_input"]);

ИЛИ

Selenium.Click(//INPUT[@id='Search_Fields_profile_docno_input']);

Ответы [ 5 ]

5 голосов
/ 17 июня 2011

* [Id =] обозначает, что это может быть любой элемент, тогда как второй явно упоминает селен, чтобы искать ТОЛЬКО поля INPUT, которые имеют идентификатор как Search_Fields_profile_docno_input. Второй xpath лучше по следующим причинам

  1. Требуется больше времени, чтобы найти элемент, используя *, так как идентификаторы всех элементов должны совпадать.
  2. Если ваш HTML-код не «хорошо написан», могут быть другие элементы с таким же идентификатором, что может привести к сбою теста.
2 голосов
/ 17 июня 2011

Первый соответствует любому элементу с совпадающим идентификатором, а второй ограничивает совпадения <input> элементами.Если бы это были CSS-выражения, это было бы разницей между #Search_Fields_profile_docno_input и input#Search_Fields_profile_docno_input.

Если предположить, что вы используете этот идентификатор только один раз на своей веб-странице, два XPath фактически эквивалентны.Они оба будут соответствовать элементу <input id="Search_Fields_profile_docno_input"> и никаким другим.

1 голос
/ 18 июня 2011

Есть несколько хороших ответов на ваше "почему?"Вопрос здесь, но для использования Selenium есть еще лучшая альтернатива.Поскольку у вашего элемента страницы есть атрибут ID, используйте локатор идентификаторов Selenium вместо XPath или CSS:

Selenium.Click("id=Search_Fields_profile_docno_input");

Это будет происходить непосредственно с элементом и будет выполняться быстрее, чем с любым другим локатором.Обратите внимание, что синтаксис id=value, а не id="value".

0 голосов
/ 02 сентября 2012

Google только что выпустил Wicked Good XPath - переписывание знаменитой JavaScript-XPath от Cybozu Lab.Ссылка: https://code.google.com/p/wicked-good-xpath/ Переписанная версия на 40% меньше и примерно на 30% быстрее оригинальной реализации.

Вы можете проверить это и заменить ту, которая используется в Selenium.

0 голосов
/ 17 июня 2011

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

...