我试图通过搜索特定的“值”来使用xpath
访问元素,这里是元素:
<body>
<div class="smenu" id="smenu4">
<input tabIndex="-1" type="button" onclick="SearchEng" value="FindEng" />
<!--> Lots of inputs <!-->
</div>
</body>
我要访问的元素是<input> tabIndex="-1" type="button" onclick="SearchEng" value="FindEng" </input>
我尝试使用的xpath是://div[*/text()='smenu4']/descendant::input[@value='FindEng']
但它不会被发现。什么是正确的xpath
?
我是xpath
的新手,如果这是一个愚蠢的问题我会道歉。
答案 0 :(得分:2)
根据我的评论,首先你的HTML是无效的(它在语法上不正确,但它绝对不是你的意思)。这就是格式化元素的方式:
<!--Using Auto Close-->
<input tabIndex="-1" type="button" onclick="SearchEng" value="FindEng" />
<!--Using Manual Close-->
<input tabIndex="-1" type="button" onclick="SearchEng" value="FindEng"></input>
一旦整理好了,那么你的XPath就有点乱了......
您使用的是text()='smenu4'
,但您的示例HTML已id="smenu4"
。 text()
node-test允许您获取元素中的文本,因此我认为这不会起作用...而是尝试@id='smenu4'
然后您正在搜索[@value='SearchEng']
,但value
未设置为SearchEng
,而是设置为FindEng
。所以这应该是[@value='FindEng']
。
然而,整个事情可以简单地写成......
//div[@id='smenu4' and input[@value='FindEng']]
<强>更新强>
我刚刚回到这里并重新阅读了这个问题,上面的XPath不正确,因为它会返回<div>
所在的input
。
这就是我认为你想要的(假设input
将是div
的直接后裔)......
//div[@id='smenu4']/input[@value='FindEng']
否则,如果它不一定是直系后代,那么使用......
//div[@id='smenu4']/descendant::input[@value='FindEng']
(我现在承认这实际上与你原来的很接近,所以我收回了我的“一点点混乱”声明......对不起!)