c# - 我如何知道 Selenium 在父节点下的节点位置?

标签 c# html selenium xpath

我想弄清楚如何知道当前节点在其父节点下的位置,目前我使用的是 selenium,大部分时间我使用 Xpath。这是因为我想提取一个表的所有列 在此示例中,列数是动态生成的

<tabe>
    <tr>
        <td>23</td>
        <td>42</td>
        <td>31</td>
    </tr>
    <tr>
        <td>13</td>
        <td>21</td>
        <td>32</td>
    </tr>
</table>

假设我需要第二个列(42 和 21),但是由于内容是动态生成的,所以我不知道它是否是第二个列,我只知道我想要编号为 42 的列。所以用 Selenium 我很容易得到42。但我需要它的位置 td。

我考虑过一个可能复杂而缓慢的算法。基本上是这样的:

  1. 获取current下的html代码
  2. 获取当前节点的父节点
  3. 迭代(在计数时)得到父级并将每个子级内部代码与我找到的内部代码进行比较。
  4. 我需要考虑的一些其他验证
  5. 当我找到它时,它就是柱子

该算法有一些问题,例如“如果有 2 个元素具有相同的内部代码怎么办”,正如我提到的那样,它可能很慢并且在我开始考虑 Row 和 colum 跨度时不让我开始(目前我只是需要当前行中的位置)。

所以有更简单的方法吗?一些我不知道的 selenium 函数或者可能是通过 XPath 获取它的方法?

谢谢 :)

最佳答案

在尝试使用 XPath 后,我想到了以下查询;

//tr[2]/td[position()=count(//tr[1]/td[.='42']/preceding-sibling::*) + 1]

这将从第一个“TR”的“TD”中找到的文本选择中为您提供第二个“TR”的相对定位的“TD”。

这是基于 Find position of a node using xpath

关于c# - 我如何知道 Selenium 在父节点下的节点位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229737/

相关文章:

c# - 由于其保护级别,链接按钮单击事件无法访问

c# - 如何使用 C# 通过 Selenium WebDriver 获取下拉列表中的所有选项?

c# - asp.net mvc 应用程序中的工作单元模式

html - 伪类和文本装饰问题 :underline in IE6

html - 为 Google 表单生成自己的 HTML

python - 允许 Firefox 使用 Selenium 自动下载文件。这可以用 PhantomJS 完成吗?

c# - 猴子可以走 2 步或 3 步 - 有多少种不同的方法可以到达顶峰?

javascript - 如何在html中形成拐 Angular 处 flex 的垂直线

python - 错误 "Failed to decode response from marionette"后继续 selenium 脚本

python - Selenium find element_by_id 不适用于单选按钮