如何找到跳过内部元素的元素的xpath

时间:2014-05-27 07:20:14

标签: html selenium xpath

我有一个复杂的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>

我必须得到关于&#34;名字&#34;的输入元素。跨度

例如:

By.xpath("//span[contains(text(), 'First Name')]/../../td[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/input")

但..我可以跳过htmls之间并直接访问输入元素......类似于什么?

By.xpath("//span[contains(text(), 'First Name')]/../../td[2]//input[contains@id,'MainLimitLimit')]")

3 个答案:

答案 0 :(得分:1)

您可以使用//,这意味着在任何级别

By.xpath("//span[contains(text(), 'First Name')]//td[2]/input[contains@id,'MainLimitLimit')]")

答案 1 :(得分:1)

你可以尝试这个Xpath:

//td[contains(span,'First Name')]/following-sibling::td[1]//input[contains(@id, 'MainLimitLimit')]

说明:

选择<td><span>First Name</span></td>元素:

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

然后在<td>元素旁边获取<td>元素:

/following-sibling::td[1]

然后在上面第2步中选择的<input>元素中获取<td>元素:

//input[contains(@id, 'MainLimitLimit')]

答案 2 :(得分:0)

您可以使用“名字”范围作为谓词。请尝试以下代码

//td[preceding-sibling::td[span[contains(text(), 'First Name')]]]//input[contains(@id,'MainLimitLimit')]