1

在 Google 上进行研究时,我相信您可以在 XPATH 语句中使用 * 作为通配符,但事实并非如此。因此,任何人都可以帮助我为以下情况找到一个好的 XPATH 语句:

我有 X 个输入字段,其 id 模式为“optionsX.name”。X 可以是任何数字,但可能在 0-99 之间,因此可以是 2 位数字。喜欢:

<input id="options0.name" type="text" value="value" name="options[0].name">

如何创建返回与该模式匹配的所有输入元素的 XPATH 语句?我像这样尝试了前面提到的通配符:

int numberOfFields = getDriver().findElements(By.xpath("//input[@id='options*.name']")).size();

使用的 XPATH 为:

//input[@id='options*.name']

我想要一个只返回带有 id excatly 'options??.name' 的输入的语句,其中 ?? 可以是一位或两位数的通配符/未知,因为还有其他类似的输入以及我不想包含的其他结尾。所以我需要通配符周围的前缀和后缀。

问候马丁

4

1 回答 1

2

使用 XPath 2.0 的正则表达式

您不能在字符串比较中使用通配符。在 XPath 2.0(selenium 不支持)中,您可以使用fn:matches(...)which 与正则表达式匹配:

//input[matches(@id, 'options\d+\.name')]

在 XPath 1.0 中模拟通配符

在 XPath 1.0 中,您所能做的就是根据模式检查字符串的开始和结束(这实际上与在其间使用通配符相同)。遗憾的是,虽然starts-with(...),ends-with(...)仅从 XPath 2.0 开始可用,所以我们必须解决这个问题:

//input[starts-with(@id, 'options') and contains(substring(@id, string-length(.)-4), '.name')

无法使用该模式在一个字符串中构造多个通配符。

于 2013-05-17T10:58:21.107 回答