Кажется, что OpenQA, парни позади Селена, уже решил эту проблему. Они определили некоторые переменные к пробелам соответствия explicitely. В моем случае я должен использовать XPath, подобный //td[text()="${nbsp}"]
.
я воспроизвел здесь текст от OpenQA относительно этой проблемы (нашел здесь ):
HTML автоматически нормализует пробел в элементах, игнорируя продвижение/конечные пробелы и преобразовывая дополнительные пространства, вкладки и новые строки в одиночный пробел. Когда Селен читает текст из страницы, это пытается копировать это поведение, таким образом, можно проигнорировать все вкладки и новые строки в HTML и сделать утверждения на основе того, как текст смотрит в браузере, когда представлено. Мы делаем это путем замены всего невидимого пробела (включая неразрывное пространство"
") с одиночным пробелом. Должны быть сохранены все видимые новые строки (<br>
,<p>
, и<pre>
отформатированные новые строки).Мы используем ту же логику нормализации на тексте HTML таблицы тестового сценария Selenese. Это имеет много преимуществ. Во-первых, Вы не должны смотреть на источник HTML страницы для выяснения, каковы утверждения должны быть; "
" символы невидимы конечному пользователю, и таким образом, Вам не придется волноваться о них при записи тестов Selenese. (Вы не должны помещать"
" маркеры в свой тестовый сценарий к assertText на поле, которое содержит"
".) Можно также поместить дополнительные новые строки и пробелы в тегах Selenese<td>
; так как мы используем ту же логику нормализации на тестовом сценарии, как мы делаем на тексте, мы можем удостовериться, что утверждения и извлеченный текст будут соответствовать точно.Это создает определенную проблему в тех редких случаях, когда Вы действительно хотите/нуждаетесь вставить дополнительный пробел в свой тестовый сценарий. Например, Вы, возможно, должны ввести текст в поле как это: "
foo
". Но если Вы просто запишете<td>foo </td>
в Вашем тестовом сценарии Selenese, мы заменим Ваши дополнительные пространства всего одним пространством.Эта проблема имеет простое обходное решение. Мы определили переменную в Selenese,
${space}
, чье значение является одиночным пробелом. Можно использовать${space}
для вставки пространства, которое не будет автоматически обрезано, как это:<td>foo${space}${space}${space}</td>
. Мы также включали переменную${nbsp}
, который можно использовать для вставки неразрывного пространства.Примечание, которое XPaths делают не , нормализует пробел путем, мы делаем. Если необходимо записать XPath как [1 115], но HTML ссылки действительно"
hello world
", необходимо будет вставить реальное"
" в тестовый сценарий Selenese, чтобы заставить его соответствовать, как это://div[text()="hello${nbsp}world"]
.
Я нашел, что могу сделать соответствие, когда я ввел трудно кодированное неразрывное пространство (U+00A0) путем ввода Alt+0160 в Windows между двумя кавычками...
//table[@id='TableID']//td[text()=' ']
работал на меня со специальным символом.
Из того, что я понял, стандарт XPath 1.0 не обрабатывает символы Unicode выхода. Кажется, существуют функции для этого в XPath 2.0, но похоже, что Firefox не поддерживает его (или я неправильно понял что-то). Таким образом, Вы имеете отношение к локальной кодовой странице. Ужасный, я знаю.
На самом деле, похоже, что стандарт полагается на язык программирования с помощью XPath для обеспечения корректной Управляющей последовательность Unicode... Так, так или иначе я сделал правильную вещь.
Попытайтесь использовать десятичный объект  
вместо именованной сущности. Если это не работает, необходимо быть в состоянии просто использовать unicode символ для неразрывного пространства вместо
объект.
(Примечание: Я не попробовал это в XPather, но я действительно пробовал его в Кислороде.)
Примите во внимание, что совместимый стандартами процессор XML заменит любые ссылки на сущность кроме пяти стандартных XML (&
, >
, <
, '
, "
) с соответствующим символом в цели, кодирующей к тому времени, когда выражения XPath оценены. Учитывая, что поведение, предложения PhiLho и jsulak являются способом пойти, если Вы хотите работать с инструментами XML. Когда Вы входите  
в выражение XPath, оно должно быть преобразовано в соответствующую последовательность байта, прежде чем выражение XPath будет применено.
Я не могу получить использование соответствия, Xpather, но следующее работал на меня с простым XML и файлами XSL в Блокноте Microsoft XML:
<xsl:value-of select="count(//td[text()=' '])" />
возвращенное значение равняется 1, который является правильным значением в моем тестовом сценарии.
Однако я действительно должен был объявить nbsp как объект в моем XML и XSL использование следующего:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
я не уверен, помогает ли это Вам, но я смог к на самом деле , находят nbsp с помощью выражения XPath.
Редактирование: Мой пример кода на самом деле содержит символы '& nbsp'; , но выделение синтаксиса JavaScript преобразовывает его в пробел. Не будьте вводят в заблуждение!
Поиск
или [только 111] - Вы пробовали это?