在WebDriver By.XPATH中使用通配符

时间:2013-05-17 09:59:54

标签: java xpath webdriver selenium-webdriver wildcard

在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的输入'选项?? .name'在哪里?可以是一个或两个数字的通配符/未知,因为还有其他类似的输入与我不想包括的其他结尾。所以我需要通配符周围的前缀和后缀。

关心马丁

1 个答案:

答案 0 :(得分:2)

使用XPath 2.0的正则表达式

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

//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')

使用该模式在一个字符串中构造多个通配符是不可能的。