0

实际的 xpath 是//*[@id="location_in_196548881_chzn"],中间的数字是随机生成的。我想搜索这个节点。

当 id 不变时,我的搜索调用是这样的

find(:xpath,'//*[@id="location_in_196548881"]')

试过这个但没有用

//id[contains(text(), 'location_in_')]

在找到这个 id 时,我怎么能忽略这个数字?

HTML 片段是

<div class='control-group'>
<label class='control-label' for='inputLocation'>
Location
</label>
<div class='controls location'>
<select class="span6 first" data-chosen_select="true" data-placeholder="via Location" id="location_in_196548881" name="browse[relation][location_in][]"><option value=""></option>
<optgroup label="Top"><option value="43705">Bangalore</option>
<option value="43767">Chennai</option>
4

1 回答 1

0

您的想法是正确的,但是如果您的原始 XPath 用于静态数字,那么只需将@id=''部分替换为您在第二个 XPath 中尝试的部分,如下所示:

//*[contains(@id,'location_in_')]

如果id是一个属性,那么您使用第一个 XPath 正确地引用了它,这就是您返回某些东西的原因。在您的第二次调用中,您引用它就好像它是一个包含您要查找的文本的节点。

换句话说,//id[contains(text(), 'location_in_')]将适用于类似的东西

<root>
<id>location_in_12345</id>
</root>

但你实际上似乎在寻找的是

<root>
<node1 id="location_in_1235">text</node1>
<node2 id="location_in_5678">text</node2>
</root>

因此,您可以用我提供的内容替换您原来的 XPath:

find(:xpath,'//*[contains(@id,"location_in_")]')
于 2013-03-13T14:14:55.657 回答