如何查找元素的xpath,跳过内部元素

3

我有一个复杂的html结构,其中包含很多表格和div。而且这个结构可能会改变。如何在跳过中间元素的情况下找到xpath。 例如:

<table>
  <tr>
    <td>
      <span>First Name</span>
    </td>
    <td>
      <div>
        <table>
          <tbody>
            <tr>
              <td>
                <div>
                  <table>
                    <tbody>
                      <tr>
                        <td>
                          <img src="1401-2ATd8" alt="" align="middle">
                        </td>
                        <td><span><input atabindex="2"  id=
                        "MainLimitLimit" type="text"></span></td>
                      </tr>
                    </tbody>
                  </table>
                </div>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </td>
  </tr>
</table>

我需要根据“名字”标签获取输入元素。
例如:
By.xpath("//span[contains(text(), 'First Name')]/../../td[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/input")

但是,我可以跳过HTML之间的部分直接访问输入元素吗?类似这样:
By.xpath("//span[contains(text(), 'First Name')]/../../td[2]//input[contains@id,'MainLimitLimit')]")
3个回答

1
你可以尝试使用这个Xpath:
//td[contains(span,'First Name')]/following-sibling::td[1]//input[contains(@id, 'MainLimitLimit')]

解释:

选择<td><span>名字</span></td>元素:

//td[contains(span,'First Name')]

然后获取上面 <td> 元素旁边的 <td> 元素:
/following-sibling::td[1]

在上述第二步中选择的 <td> 元素内获取 <input> 元素:
//input[contains(@id, 'MainLimitLimit')]

1
您可以使用//,它表示在任何级别。
By.xpath("//span[contains(text(), 'First Name')]//td[2]/input[contains@id,'MainLimitLimit')]")

0
你可以使用“First Name” span 作为谓词。尝试下面的代码。
//td[preceding-sibling::td[span[contains(text(), 'First Name')]]]//input[contains(@id,'MainLimitLimit')]

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