Selenium: есть ли способ написать xpath для получения элементов, содержащих текст, который заканчивается цифрами - PullRequest
1 голос
/ 21 октября 2019

Я пытаюсь написать xpath, который выбирает все элементы, содержащие текст, который заканчивается цифрами и заключен в фигурные скобки. Числа могут быть любыми и иметь любое количество цифр. Это возможно в XPath1.0? Я не могу использовать регулярные выражения, поскольку это не разрешено в XPath1.0

<div class = '12345' >
   <div class = '98231'>I want this (101)</div>
   <div class = '98232'>I don't want this 101</div>
   <div class = '98233'>I want this (1)</div>
   <div class = '98234'>I don't want this (10A1)</div>
</div>

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

В XPath-1.0 вы не можете использовать RegEx'es.
Но вы можете использовать функцию fn:number(), чтобы проверить, может ли данная строка быть действительным числом с помощью функции fn:boolean:

/div/div[boolean(number(substring-before(substring-after(.,'('),')')))]

Очевидно, это работает, только если в строке нет других скобок. И он не проверяет, находится ли число в скобках в конце строки. Чтобы добавить это дополнительное ограничение, измените выражение на

/div/div[not(boolean(string(normalize-space(substring-after(.,')'))))) and boolean(number(substring-before(substring-after(.,'('),')')))]

. Это добавит еще один предикат, чтобы проверить, есть ли после ) другие символы, кроме пробелов. Начальные и конечные пробелы между скобками автоматически удаляются функцией fn:number().

0 голосов
/ 22 октября 2019

Попробуйте следующий xpath:

//div//div[text() and contains(text(),'(') and contains(text(),')')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...