//*[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
Мобильная версия