Xpath использует совпадения, а Regex работает в тестере Xpath, но при выдаче кода InvalidSelectorException Не удалось выполнить «оценку» для «документа» - PullRequest
0 голосов
/ 17 ноября 2018

HTML

<div class="top-section" style="" xpath="1">
         <input id="role" value="admin" hidden="">
            <small>Welcome </small> <b style="">8828024404, MCGM</b>
            <a href=""><img alt="Attendance" width="" height="" src="css/assets/images/logo.png"></img></a>
            <a href="/logout" class="float-right logout">Log Out</a>
        </input>
</div>

Строка для поиска

8828024404, MCGM

Выражение Xpath

//b[matches(text(),'[0-9]{10}, [A-Za-z]*')]

Исключение

org.openqa.selenium.InvalidSelectorException: неверный селектор: невозможно найти элемент с выражением xpath // b [соответствует (text (), '[0-9] {10}, [A-Za-z] ')] из-за следующего ошибка: SyntaxError: не удалось выполнить «оценку» для «документа»: строка '// b [соответствует (text (),' [0-9] {10}, [A-Za-z] ')]' недопустима XPath выражение. (Информация о сеансе: chrome = 70.0.3538.102) (драйвер информация: chromedriver = 2.42.591088 (7b2b2dca23cca0862f674758c9a3933e685c27d5), платформа = Windows NT 10.0.16299 x86_64) (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека) Длительность или время ожидания команды: 0 миллисекунд

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Совершенно не уверен насчет вашего точного варианта использования , почему вы хотите xpath для поиска Regex .

Однако результирующий текст кажется частью Приветственного сообщения , и я чувствую, что ваш сценарий использования может быть для извлечения текста, который будет динамический например. 8828024404, MCGM .

В этом случае вы можете использовать одно из следующих решений:

  • XPath 1:

    //div[@class='top-section']/input[@id='role' and @value='admin']//b
    
  • XPath 2:

    //div[@class='top-section']/input[@id='role' and @value='admin']/small[contains(.,'Welcome')]//following::b[1]
    
0 голосов
/ 17 ноября 2018

Selenium поддерживает версию XPath 1.0, а fn:matches - из XPath 2.0.

Если вы хотите, чтобы соответствовал полужирному тексту, который начинается с 10 цифр перед запятой , вы можете попробовать ниже XPath

//b[string-length(substring-before(., ','))=10 and number(substring-before(., ','))]

Дайте мне знать, если у вас есть больше ограничений для требуемого элемента

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