You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Selenium Basic中用XPath获取可输入框的行列名称

解决行列名称获取的XPath问题

问题根源

你用./th获取行名称的逻辑错误——包含输入框的数据行(<tr>)里没有<th>标签,<th>仅存在于表头行;数据行的行标识(如USD1、USD2)是在第一个<td>内的<span>元素中。

修正后的代码及XPath说明

1. 获取行名称(如USD2)

替换行名称的获取代码:

Dim rowName As String
rowName = rowElement.FindElementByXPath(".//td[1]/span").Text

如果<td>的文本与内部<span>完全一致,也可以简化为:

rowName = rowElement.FindElementByXPath(".//td[1]").Text

逻辑:.//td[1]定位当前行的第一个单元格,再通过/span精准提取行标识文本。

2. 获取列名称(如Bid)

原列XPath的位置计算逻辑有误,修正后直接关联输入框所在单元格与表头对应列:

Dim columnHeaderElement As WebElement
Set columnHeaderElement = Example.FindElementByXPath("./ancestor::table/tr[1]/th[position() = count(./ancestor::td/preceding-sibling::td) + 1]")
Dim columnName As String
columnName = columnHeaderElement.Text

逻辑:

  • ./ancestor::td定位输入框所在的单元格
  • count(./ancestor::td/preceding-sibling::td) + 1计算该单元格在当前行的位置(从1开始计数)
  • 匹配表头行(tr[1])中对应位置的<th>,提取列名称

完整修正代码片段

Table = driver.FindElementById("ctl00_ContentPlaceHolder1_GridView1")
Example = Table.FindElementById("ctl00_ContentPlaceHolder1_GridView1_ctl03_txtBid")
Dim rowElement As WebElement
Set rowElement = Example.FindElementByXPath("./ancestor::tr")

' 获取行名称
Dim rowName As String
rowName = rowElement.FindElementByXPath(".//td[1]/span").Text

' 获取列名称
Dim columnHeaderElement As WebElement
Set columnHeaderElement = Example.FindElementByXPath("./ancestor::table/tr[1]/th[position() = count(./ancestor::td/preceding-sibling::td) + 1]")
Dim columnName As String
columnName = columnHeaderElement.Text

验证结果

针对输入框ctl00_ContentPlaceHolder1_GridView1_ctl03_txtBid,会正确返回:

  • 行名称:USD2
  • 列名称:Bid

内容的提问来源于stack exchange,提问作者Lv Linh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:24:57