XPath не совпадает, когда нужный элемент содержит дочерние элементы? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть следующее выражение XPath:

//a[@attribute='my-attribute']

Когда у меня есть следующий элемент в HTML, который ищет XPath, он соответствует ожидаемому:

<a attribute="my-attribute">Some text</a>

Но если под этим элементом есть тег <svg>, XPath не возвращает совпадений:

<a attribute="my-attribute">
    <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"
        viewBox="0 0 24 24" focusable="false"></svg>
</a>

Почему XPath не совпадает в этом случае? Есть ли способ, которым я могу изменить свое выражение, чтобы оно соответствовало?

EDIT:

Очевидно, это связано с пространством имен в элементе <svg>. Использование функции local-name() позволяет сопоставить ее в используемом мной тестере XPath:

//*[local-name()='a' and @attribute='my-attribute']

Однако , это все равно не совпадает при работе через Selenium WebDriver. Есть идеи, как заставить это работать с Selenium?

1 Ответ

3 голосов
/ 28 марта 2019

Вы можете быть смущены тем, как хостинговая среда XPath представляет выбранные элементы a.

Добавление элемента svg к элементу a не повлияет на то, что выбрано

//a[@attribute='my-attribute']

В случае

<a attribute="my-attribute">Some text</a>

элемент a имеет строковое значение, состоящее не только из символов пробела, но с

<a attribute="my-attribute">
    <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"
        viewBox="0 0 24 24" focusable="false"></svg>
</a>

элемент a имеет строковое значение, которое состоит только изПробелы, поэтому для текстовых результатов выделения вы ничего не увидите.

Если вы оцените count(//a[@attribute='my-attribute']), вы, вероятно, увидите одинаковые результаты для обоих случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...