首页 > 解决方案 > Selenium 使用 xpath 查找元素

问题描述

我需要为投资者 A 找到具有贷款金额的元素(在本例中为 100、100)

有人可以建议如何编写 xpath 来查找这些元素

[示例] 在下面的屏幕截图中,我需要找到 xpath 以获取第一行和第二行中包含文本 100 的元素,这些元素被选中了单选按钮。

xpath 下面给出了所有三个贷款金额

//td[contains(., "Investor A")]/preceding-sibling::td[descendant::input][1]/label/text()

但我只需要选择单选按钮的第一行和第二行的贷款金额

在此处输入图像描述

<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
  crossorigin="anonymous"></script>
<html>

<head>
  <style>
    table {
      border: 1px dashed #cccccc;
      border-collapse: collapse;
    }

    table td {
      border: 1px dashed #cccccc;
    }
  </style>
</head>

<body>
  <table>
    <tr>
      <td>
        <label>Loan1</label>
      </td>
      <td>
        <input type='radio' name='L1' id='L1_one'></input>
        <label>100</label>
      </td>
      <td>
        <label>Investor A</label>
      </td>
      <td>
        <input type='radio' name='L1' id='L1_two'></input>
        <label>200</label>
      </td>
      <td>
        <label>Investor B</label>
      </td>
      <td>
        <input type='radio' name='L1' id='L1_three'></input>
        <label>300</label>
      </td>
      <td>
        <label>Investor C</label>
      </td>
    </tr>
    <tr>
      <td>
        <label>Loan2</label>
      </td>
      <td>
        <input type='radio' name='L2' id='L2_one'></input>
        <label>100</label>
      </td>
      <td>
        <label>Investor A</label>
      </td>
      <td>
        <input type='radio' name='L2' id='L2_two'></input>
        <label>200</label>
      </td>
      <td>
        <label>Investor B</label>
      </td>
      <td>
        <input type='radio' name='L2' id='L2_three'></input>
        <label>300</label>
      </td>
      <td>
        <label>Investor C</label>
      </td>
    </tr>
    <tr>
        <td>
          <label>Loan3</label>
        </td>
        <td>
          <input type='radio' name='L3' id='L3_one'></input>
          <label>100</label>
        </td>
        <td>
          <label>Investor A</label>
        </td>
        <td>
          <input type='radio' name='L3' id='L3_two'></input>
          <label>200</label>
        </td>
        <td>
          <label>Investor B</label>
        </td>
        <td>
          <input type='radio' name='L3' id='L3_three'></input>
          <label>300</label>
        </td>
        <td>
          <label>Investor C</label>
        </td>
      </tr>
  </table>
</body>

标签: rubyseleniumselenium-webdriverxpathcapybara

解决方案


由于您正在寻找给定贷款标签 (Loan1) 和投资者 (Investor A) 的贷款金额,因此您可以使用下面的 XPath。

//tr[.//label[.='Loan1']]//label[.='Investor A']//preceding::label[1]
^ find a TR
    ^ that has a descendant LABEL with the loan label
                         ^ that TR has a descendant LABEL that contains the investor name
                                                ^ then go back up the DOM and find the first LABEL

这将返回“100”。

您可以在 XPath 中插入您想要的任何贷款和投资者标签,并获得您想要的任何贷款金额。

"//tr[.//label[.='#{loanLabel}']]//label[.='#{investorLabel}']//preceding::label[1]"

请参阅Ruby:将变量合并到字符串中


推荐阅读