如何从父 xpath 对子 xpath 应用条件

How to apply condition on child xpath from parent xpath

如果状态为 "Pending"(父节点),我想单击 "waved off" 按钮(子节点)。

那么量角器的xpath是什么?

我已经创建了 waved off 按钮的根 xpath,但我不知道如何在编码中使用它。

如果我批准第一个 tr 标签,那么它会下降,如果第二个 tr 标签处于待定状态,则会出现在顶部。我的代码中总共有 5 个 tr 标签。 并且所有 tr 标签都没有固定在它们的位置上。每当我 运行 我的脚本时,我都会在顶部获得待处理的 tr 标签。

<div>
<table>
<tbody>
<tr>
  <td>
    <p> required </p>
  </td>
  <td>
    <p> Pending </p>
  </td>
  <td>
    <div>
      <img>     </img>
      <div>
        <div>       </div>
        <div>       </div>
        <button> View Remark </button>
        <button> Waved off </button>
      </div>
    </div>
  </td>
</tr>
<tr>
  <td>
    <p> required </p>
  </td>
  <td>
    <p> Pending </p>
  </td>
  <td>
    <div>
      <img>     </img>
      <div>
        <div>       </div>
        <div>       </div>
        <button> View Remark </button>
        <button> Waved off </button>
      </div>
    </div>
  </td>
</tr>
</tbody>
</table>
</div>

您可以使用 .. 表达式来选择相对于 XPath 中当前选定节点的父节点。如果能拿到"Pending"<p>标签,那么只需要上3个标签,然后找到一个包含"waved off":

的按钮
//p[contains(., 'Pending')]/../../..//button[contains(., 'waved off')]
\________________________/  \_____/ \________________________________/
             |                 |                    |
            (1)               (2)                  (3)
            <p>          +--> <tr>              <button>
              Pending    |      <td>               waved off
            </p>         |        <p>            </button>
                         |          required
                         |        </p>
                         |      </td>
                         |      <td>
                         +----<-- <p>
                                    Pending
                                  </p>
                                </td>
                                <td>
                                  <div>
                                    <img>
                                    <div>
                                      <button>
                                        waved off
                                      </button>
                                    </div>
                                  </div>
                                </td>
  1. 在包含文本 "Pending".

  2. 的 HTML 文档中任意深处找到一个 <p> 标签
  3. 从包含文本 "Pending" 的 <p>,向上三个父节点,将您带到 <tr> 标签。

  4. <tr> 标签中找到一个按钮,该按钮是包含文本 "wave off".

    [ 的 <tr> 标签的后代=30=]

它会是这样的:

//p[contains(text(), 'Pending')]/parent::td/following-sibling::*/descendant::*/button[contains(text(),'Waved off')]

今后请将整个 <table> 标签内容包含到您的问题中,获得更准确建议的机会会更高

参考文献:

实际上,有 2 个 <button> 的文本为 Waved off 相对于 <p> 节点的文本为 Pending。因此,找到所需的元素,您可以使用以下 :

  • Xpath:

    //p[contains(., 'Pending')]//following::td[1]//button[contains(., 'Waved off')]
    
  • 快照:

注意:如上所述,此 定位器策略 将识别 2 个元素,因为您的用例是单击您拥有的所需元素使 元素的 waiter 可点击