Необычное поведение XPath в SeleniumJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Необычное поведение XPath в Selenium

Сообщение Anonymous »

Я столкнулся с необычной проблемой с выражением XPath в Selenium с использованием Java. Следующее выражение XPath вызывает исключение InvalidSelectorException:
//*[normalize-space(string()) = '1' and not(.//*[normalize-space(string()) = '1'])]

Это выражение предназначено для поиска элементов, имеющих текстовое содержимое «1» (после нормализации), но не имеющих дочерних элементов с таким же содержимым.
Выдается следующее исключение:
Caused by: org.openqa.selenium.InvalidSelectorException: Given xpath expression "[[FirefoxDriver: firefox on WINDOWS (75xxxx7a-dxx5-49d5-9835-34xxxx6c2)] -> xpath: //*[string(normalize-space(string())) = '1' and not(.//*[normalize-space(string()) = '1'])]]" is invalid: SyntaxError: Document.evaluate: The expression is not a legal expression

Странно то, что если я заменю первую «1» на «один», вот так:
//*[normalize-space(string()) = 'one' and not(.//*[normalize-space(string()) = '1'])]

Он работает правильно, хотя вторая цифра «1» остается неизменной.
Я пробовал следующие варианты, но ни один из них не помог решить проблему. проблема:
  • Удаление строки():
    //*[normalize-space() = '1' and not(.//*[normalize-space() = '1'])]
  • Использование двойных кавычек вместо одинарных:
    //*[normalize-space(string()) = "1" and not(.//*[normalize-space(string()) = "1"])]
  • Принудительное сравнение строк:
    //*[normalize-space(string()) = string('1') and not(.//*[normalize-space(string()) = '1'])]
И несколько других.
Ни одна из этих попыток не решила проблему. Похоже, проблема связана с использованием числа «1» в первой части выражения.
Вопрос:
Почему это выражение XPath не работает с «1», но работает с «единицей»?
Как заставить XPath работать, если обе части выражения содержат «1» (или «1»)?
Будем очень признательны за любые идеи или решения. Если необходима дополнительная информация, дайте мне знать.
Обновление:
Когда я оцениваю выражение в Chrome Devs Инструменты работают нормально, но не когда я пытаюсь идентифицировать его через WebDriver:
driver.findElements(By.xpath("//*[string(normalize-space(string())) = '1' and not(.//*[normalize-space(string()) = '1'])]"));


Подробнее здесь: https://stackoverflow.com/questions/788 ... n-selenium
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»