我需要在现场测试一个程序,所以在我到达现场之前我无法测试它。我想知道以下Xpath是否正确。我已阅读http://www.w3schools.com/xpath/xpath_syntax.asp上的语法,但我仍不确定这是否正确。
如果tablerow <tr>
和<tr>
中有一个按钮,则会有<td>
。在<td>
内指定了<button value = 'button'>
。
我认为Xpath将是:
"/html/body//table//tr//td//button[@value=['button']"
这是对的吗?
提前致谢
答案 0 :(得分:3)
正确的XPath很可能是
//button[@value = 'button' and ancestor::td]
如果它们不是button
元素的直接子元素,也会在td
内找到td
个元素。如果您知道button
元素始终是td
的直接子元素,则可以使用类似
//td/button[@value = 'button']
或
//button[@value = 'button' and parent::td]
在这么多地方你不需要//
而你不需要在html
开始表达。 //
(descendant-or-self::
轴)可能会或可能不会影响性能,具体取决于应用程序。
另外,正如John在我的回答前30秒指出的那样,你的表达中有一个多余的括号。
答案 1 :(得分:0)
缺少右括号,所以没有。第二个左括号不应该在那里。
/html/body//table//tr//td//button[@value='button']
顺便说一句,双//
选择器很慢,应该尽可能避免。我推荐
/html/body/table/tbody/tr/td/button[@value='button']
或
//td/button[@value='button']
代替。我们知道<td>
会在一个表格中,因此如果您需要额外的table
,tr
和td
元素搜索,则不需要反正使用//
。