如何单击删除有文本的特定行?

时间:2019-05-20 09:26:35

标签: java selenium-webdriver visual-studio-code

图片:

enter image description here

我必须单击文本为“ goregaon-vashi”的删除选项卡。我也尝试过使用兄弟姐妹,但失败了。

<table class="table table-hover txCustomTable" data-ng-show="!fetchingTxTableData" style="">
        <tbody style="margin-top: 0px;">
            <!-- ngRepeat: currentRow in tableRows --><tr data-ng-repeat="currentRow in tableRows" data-ng-class="currentRow.activeClass" class="ng-scope" style="">
                <!-- ngRepeat: currentColumn in metadata.columns --><td data-ng-repeat="currentColumn in metadata.columns" data-ng-class="currentColumn.dataClass" class="ng-scope emp-col-name">
                    <p compile="currentRow[currentColumn.dbCol].displayHtml"><a class="customerDetailsLink ng-scope" data-ng-click="callerScope.onShowStopOnMap($parent.currentRow.stop_points)">goregaon-vashi</a></p>
                                  </td><!-- end ngRepeat: currentColumn in metadata.columns --><td data-ng-repeat="currentColumn in metadata.columns" data-ng-class="currentColumn.dataClass" class="ng-scope emp-col-actions">
                    <p compile="currentRow[currentColumn.dbCol].displayHtml"><a href="/client1/shuttle/routes/create?code=10214" class="ng-scope">Edit</a><a style="margin-left:10px;" data-ng-click="callerScope.onDeleteButtonPress('10214')" class="ng-scope">Delete</a></p>
                </td><!-- end ngRepeat: currentColumn in metadata.columns -->
                              </td><!-- end ngRepeat: currentColumn in metadata.columns -->
            </tr><!-- end ngRepeat: currentRow in tableRows -->
        </tbody><tbody>
    </tbody></table>

我尝试了类似的路径

driver.findElement(By.xpath("//*[contains(text(),'goregaon-vashi')]/following-sibling:://*[contains(text(),'Delete')]")).click();

2 个答案:

答案 0 :(得分:1)

您是否通过检查网页尝试了xpath上面提到的内容? 您提到的xpath是否突出显示了Delete的Web元素?

我已经尝试过通过复制HTML来尝试相同的操作,但是没有。

您可以使用此xpath标识Delete:

//a[contains(.,'goregaon-vashi')]/../../..//*[.='Delete']

在这里,Delete元素不是'goregaon-vashi'元素的同级元素。因此,我们必须导航其父元素,并应使用跟随兄弟的概念。

答案 1 :(得分:1)

使用这样的XPath,通常可以使用许多方法。这就是我这样处理定位器的方法。

我尝试找到一个元素,该元素是我需要引用的两个元素的父元素,该元素包含我要查找的文本'goregaon-vashi',然后是Delete链接。如果查看HTML,则会发现这两个元素都在同一表行TR中。由于两个所需元素不在同一个DOM分支中,因此我们需要找到包含一个元素的TR,然后在另一个DOM分支中向下导航至Delete链接。

首先,我们找到带有TR标签的A,其中包含'goregaon-vashi'文本。如果我们想要的只是“ goregaon-vashi”链接,则XPath看起来像

//tr//a[.='goregaon-vashi']

为了返回TR,我们需要将XPath稍微修改为

//tr[.//a[.='goregaon-vashi']]
    ^                        ^
    these extra braces indicate the property that the `TR` should contain

如果仅运行此命令,您将看到它返回父TR ...,这正是我们此步骤想要的。在下一步中,我们将DOM从第一步中找到的TR转到“删除”链接。

//tr[.//a[.='goregaon-vashi']]//a[.='Delete']
                              ^ this starts the new part

如果您熟悉XPath,那么您应该看起来很熟悉。这是对任何级别//的简单搜索,以查找包含准确文本'Delete'的A标签。

希望这是有道理的。我在您发布的HTML上对此进行了测试,并返回了正确的元素。