Я использую браузер XPather для проверки своих выражений XPATH на странице HTML.
Моя конечная цель - использовать эти выражения в Selenium для тестирования моих пользовательских интерфейсов.
У меня есть HTML-файл с таким содержанием:
<TR> <TD> ABC </ TD> <TD> & NBSP; </ TD> </ TR>
Я хочу выбрать узел с текстом, содержащим строку "
".
С обычной строкой типа «abc» проблем нет. Я использую XPATH, похожий на //td[text()="abc"]
.
Когда я пытаюсь использовать XPATH, как будто //td[text()=" "]
он ничего не возвращает. Есть ли особые правила относительно текстов с " &
"?
Ответы:
Кажется, что OpenQA , разработчики Selenium, уже решили эту проблему. Они определили некоторые переменные для явного сопоставления пробелов. В моем случае мне нужно использовать XPATH, похожий на
//td[text()="${nbsp}"]
.Я воспроизвел здесь текст OpenQA, касающийся этой проблемы ( здесь ):
источник
\u00a0
. Что сработало для меня, так это набрать неразрывный пробел на MacAlt+Shift+Space
. Веб-поиск говоритAlt+0160
об окнах.Я обнаружил, что могу найти совпадение, когда я ввожу жестко запрограммированный неразрывный пробел (U + 00A0), набрав Alt + 0160 в Windows между двумя кавычками ...
работал у меня со специальным символом.
Насколько я понял, стандарт XPath 1.0 не обрабатывает экранирование символов Unicode. Кажется, что в XPath 2.0 есть функции для этого, но похоже, что Firefox не поддерживает их (или я что-то неправильно понял). Значит, вам нужно иметь дело с местной кодовой страницей. Я знаю, некрасиво.
На самом деле, похоже, что стандарт полагается на язык программирования, использующий XPath, чтобы обеспечить правильную escape-последовательность Unicode ... Итак, каким-то образом я поступил правильно.
источник
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Попробуйте использовать десятичный объект
 
вместо именованного объекта. Если это не сработает, вы сможете просто использовать символ юникода для неразрывного пробела вместо
объекта.(Примечание: я не пробовал это в XPather, но я пробовал это в Oxygen.)
источник
Имейте в виду , что соответствующий стандартам процессор XML будет заменен любые ссылки на объекты , отличные от пяти стандартных XML, (
&
,>
,<
,'
,"
) с соответствующим символом в целевой кодировке по времени XPath выражения вычисляются. Учитывая такое поведение, предложения PhiLho и jsulak - лучший вариант, если вы хотите работать с инструментами XML. Когда вы вводите 
выражение XPath, оно должно быть преобразовано в соответствующую последовательность байтов перед применением выражения XPath.источник
В соответствии с предоставленным вами HTML:
Чтобы найти узел со строкой,
вы можете использовать любой из следующихXPath решения на основе:Использование
text()
:Использование
contains()
:Однако в идеале вы можете избежать символа ПРОБЕЛ БЕЗ РАЗРЫВА и использовать любую из следующих стратегий локатора :
Используя родительский
<tr>
узел иfollowing-sibling
:Использование
starts-with()
:Используя предыдущий
<td>
узел иfollowing
node and
следующий брат`:Ссылка
Вы можете найти соответствующее подробное обсуждение в:
с помощью SeleniumТЛ; доктор
Символ Юникода 'NO-BREAK SPACE' (U + 00A0)
источник
Я не могу найти совпадение с помощью Xpather, но с обычными файлами XML и XSL в блокноте Microsoft XML у меня работало следующее:
Возвращаемое значение - 1, что является правильным значением в моем тестовом примере.
Однако мне пришлось объявить nbsp как объект в моем XML и XSL, используя следующее:
Не уверен, что это поможет вам, но я действительно смог найти nbsp, используя выражение XPath.
Изменить: мой образец кода фактически содержит символы '& nbsp;' но подсветка синтаксиса JavaScript преобразует его в пробел. Не вводите в заблуждение!
источник
Искать
или толькоnbsp
- это вы пробовали?источник
Вы можете использовать XPath Contains, Sibling, Ancestor Functions в Selenium WebDriver для поиска элементов, не имеющих каких-либо уникальных свойств, которые можно идентифицировать.
для более подробной информации прочтите эту страницу: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
источник