XPath元素包含一个属性,其父级的父级包含另一个属性。

9
这是我在这里发布的第一篇文章,因为我看到了许多出色的答案,所以我想试一试。
我正在尝试使用XPath获取HTML文档中的特定元素。以下是基于Google网页的示例:
<html>
  <head>
    <title>XPath Test</title>
  </head>
  <body>
    <form name='f'>
      <table>
        <tbody>
          <tr>
            <td>
              <input name='q' type="text" />
            </td>
          </tr>
        </tbody>
      </table>
    </form>
  </body>
</html>

使用上述示例(为了请求帮助而简化),我想要找到name='q'的input元素,并且它有一个名为'name=f'的祖先,该祖先最多5层父级。
例如,如果我使用S.W.A.T.语法进行此操作,该语法是位于http://ulti-swat.wikispaces.com的开源Web自动化测试库,则语法如下: |AssertElementExists|Expression|name=q;parentElement.parentElement.parentElement.parentElement.parentElement.name=f|input|
我刚开始学习XPath,并试图理解如何将谓词与轴组合。是否可以使用XPath执行此类表达式?如果可以,是否有知识渊博的人可以帮忙?
1个回答

16

您可以这样做:

//input[@name='q' and ancestor-or-self::*[@name='f']]
// -- input element whose name='q' and who has an ancestor with the name='f'
或者
//input[@name='q' and ../../../../../../*[@name='f']]
// -- input element whose name='q' and who is 5 parents up with the name='f'

你可以使用这个桌面版的XPath Visualizer来测试你的XPath表达式。这里可以找到一个基础教程


不相关,但是我在这里试图找到答案来解决我的问题。如果我没错的话,这个节点应该是q吧?有没有办法说我想要f作为结果呢?我想要从y中找到包含文本的z,但是给我y。也就是说,y确实在某个地方包含了这段文本。 - Seabizkit
不相关,但是我来这里是为了找到答案。如果我没错的话,这个问题的节点应该是q吧?有没有办法说我想要f作为结果呢?我想要说从y中找到包含文本的z,但是给我y。也就是说,y确实在某个地方包含这个文本。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接