首页 > 解决方案 > Selenium:有没有办法编写 xpath 来获取包含以数字结尾的文本的元素

问题描述

我正在尝试编写一个 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>

标签: selenium-webdriverxpath

解决方案


在 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()该函数会自动删除括号之间的前导和尾随空格。


推荐阅读