使用xpath匹配包含任何整数的字符串(介于0和9之间)

时间:2014-02-27 11:52:12

标签: css regex xpath

我是XPath的新手,需要一些帮助。

系统自动生成如下所示的ID:

<input type="file" class="form-file" size="22" 
       name="files[entry-23245_field_entry_attachment_und_0]" 
       id="edit-entry-23245-field-entry-attachment-und-0-upload" 
       style="background-color: transparent;">

我能够使用xpath或css找到id但是id字符串中的数字会随着时间的推移而变化,因此下次我的测试运行时会失败,因为它无法找到字符串。

我想知道是否可以编写一个xpath表达式,它将从字符串edit-entry-的开头查找所有内容,然后在字符串中查找0-9之间的任何整数值-23245-,然后也匹配结束部分field-entry-attachment-und-0-upload。这样,当我的测试运行时,即使字符串中的数字发生变化,它也能够始终定位元素。我尝试将\d+添加到我的xpath中,但它似乎没有把它拿起来。

这是xpath:

//*[@id="edit-entry-23245-field-entry-attachment-und-0-upload"]

2 个答案:

答案 0 :(得分:0)

这是因为你的Xpath没有提取正确的属性。使用这样的Xpath来获取元素的id:

//input[@type="file" and @class="form-file"]/@id

此正则表达式应提取您正在寻找的值:

/edit-entry-\d+-field-entry-attachment-und-0-upload/

如果\ d +不适合你,这是另一种可能性:

/edit-entry-[0-9]+-field-entry-attachment-und-0-upload/

答案 1 :(得分:0)

we can't use regex in pure XPath开始,只是一个解决方法的想法。

如果您只需要匹配ID等于<input>的{​​{1}}元素,我们可以使用starts-with()ends-with()这样的函数:

"edit-entry-[arbitrary-characters-here]-field-entry-attachment-und-0-upload"

如果您使用的是XPath 1.0,其中//* [starts-with(@id, "edit-entry-") and ends-with(@id, "-field-entry-attachment-und-0-upload")] 功能不可用:

ends-with()