当前位置: 首页 > 知识库问答 >
问题:

如何使用XPath选择任何深度的子元素?

钱宇
2023-03-14

假设我有这个(简化):

<form id="myform">
    <!-- some input fields -->
    <input type="submit" value="proceed"/>
</form>

然后,我可以通过XPath选择submit按钮。//form[@id='myform']/input[@type='submit']。太棒了

但是,我的模板可能会发生变化,我希望在提交按钮的深度上保持灵活。它可能会放在一个表格中,如下所示:

<form id="myform">
    <!-- some input fields -->
    <table><tr><td>
           <input type="submit" value="proceed"/>
    </td></tr></table>
</form>

我知道我可以选择孙子的元素,但我不能选择任何深度的孙子。例如。:

  • //form[@id='myform']/*/input[@type='submit']仅选择孙子女,没有进一步的深度

那么,如何在不使用元素ID的情况下可靠地选择这个提交按钮呢?

共有3个答案

汤弘文
2023-03-14
//form/descendant::input[@type='submit']
虞安康
2023-03-14

如果您使用的是XmlDocument和XmlNode。

说:

XmlNode f = root.SelectSingleNode("//form[@id='myform']");

使用:

XmlNode s = f.SelectSingleNode(".//input[@type='submit']");

这取决于你使用的工具。但是//将从引用节点中选择任意子节点和任意深度。

桂浩言
2023-03-14

你就快到了。只需使用:

//form[@id='myform']//input[@type='submit']

//快捷方式也可以在表达式中使用。

 类似资料:
  • 问题内容: 我有一个GWT应用程序,正在尝试使用Selenium编写一些测试。 我正在使用XPath来标识测试页面上的元素。使用将无效,因为这些值是由GWT自动生成的,并且可以更改。当我意识到我可以按其标签找到按钮时,事情进展顺利,如下所示: 但是,当我开始运行多个测试时,我开始遇到问题。我意识到问题是,一旦Javascript生成的GWT应用程序的所有不同“页面”都保留在HTML中的隐藏元素中。

  • 问题内容: 我想创建一个Selenium测试,以使用AOL邮件测试我们的扩展。我设法登录到AOL并撰写了电子邮件,但是我还需要在iframe中的编辑器中选择元素。我检查了一下,即使打开了编辑器,以下测试也失败了: 我得到了错误。如何通过Xpath(或通过Selenium以任何其他方式)选择iframe的主体和其他元素? 问题答案: 在切换到之前,您无法浏览。您的xPath 将不会起作用,因为代码位

  • 如果我有 如果我想选择包含td的a,我该怎么做? 我测试过: 但是我要获得td节点,我要获得a节点。如何使用XPath实现这一点?

  • //div/SPAN[包含(text(),“默认值”)]/祖先::div/SPAN[包含(text(),“选择日期”)]/follows-sibling::div//输入 Xpath 2返回3个元素,即图像中的下拉项。 //div[@class='_selectcontainer_psmgei']/div//输入 截图:视窗截图 HTML屏幕截图:HTML代码

  • 问题内容: 考虑使用以下HTML: 我想单击abc,但是包装div可能会更改,所以 不是我想要的 我试过了: 但这不适用于更深层的嵌套 有任何想法吗? 问题答案: 的HTML 您可以将 XPATH 用作: 输出 也就是说,您的Python代码应为:

  • 问题内容: 我们选择带有Django 1.4测试和Selenium的元素,如下所示: (该类继承自)。 问题是有时有些元素没有文本,并且如果我们选择它,它就会失败(len为0)。如何选择没有文本的元素? 更新 :由于不起作用,我不得不断言两行以断言没有文本: 现在,我可以用一行声明相同的内容: 问题答案: 您可以使用XPath的 功能。