我是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"]
答案 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()