实际的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>
答案 0 :(得分:0)
你正在考虑正确的思路,但是如果你的原始XPath适用于静态数字,那么只需用你在第二个XPath中尝试的内容替换@id=''
部分,如下所示:
//*[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_")]')