首页 > 解决方案 > 每当返回多个隐藏按钮时选择显示按钮的 Xpath

问题描述

我正在尝试在我的 Web 应用程序上选择以下撤消按钮

在此处输入图像描述

撤消按钮的 HTML 由以下内容组成

<a href="" style="vertical-align: middle" class="btn btn-primary btn-sm" ng-show="true" ng-click="executeUndoCommand(transfer)">Undo</a>

表中包含撤消按钮的行由以下内容组成

<tr ng-repeat="transfer in completedTransfersSummary track by $id(transfer)">
                    <td style="vertical-align: middle" ng- 
style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}" ng-class=" 
{'highlight' : transfer.transferorBusinessId == CisBusinessID }" 
class="highlight">608445</td>
                    <td style="vertical-align: middle" ng- 
style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}" ng-class=" 
{'highlight' : transfer.transfereeBusinessId == CisBusinessID }">608446</td>
                    <td style="vertical-align: middle" nowrap="" ng- 
style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}">Merger</td>
                    <td style="vertical-align: middle" nowrap="" ng- 
 style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}">19/07/2018</td>
                    <td style="vertical-align: middle" nowrap="" ng- 
 style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}">02/01/2018</td>
                    <td style="vertical-align: middle" nowrap="" ng- 
 style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}">1.00 entitlements @ 
€229.27</td>
                    <td style="vertical-align: middle" ng- 
style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}">526461</td>
                    <td style="vertical-align: middle" ng- 
 style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}">2018</td>
                    <td style="vertical-align: middle" ng- 
 style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}"></td>
                    <td style="vertical-align: middle;" ng- 
 show="undoWithdrawRoleAssignedToUser">
                        <div ng-show="transfer.transferorBusinessId == 
CisBusinessID">
                            <a href="" style="vertical-align: middle" 
class="btn btn-primary btn-sm" ng-show="true" ng- 
click="executeUndoCommand(transfer)">Undo</a>
                            <a href="" style="vertical-align: middle" 
class="btn btn-primary btn-sm ng-hide" ng-show="false" ng- 
click="showUndoModal(transfer)">Undo</a>

                            <a href="" style="vertical-align: middle" 
class="btn btn-default btn-sm" ng-show="true" ng- 
click="executeWithdrawCommand(transfer)">Withdraw</a>
                            <a href="" style="vertical-align: middle" 
class="btn btn-default btn-sm ng-hide" ng-show="false" ng- 
click="showWithdrawModal(transfer)">Withdraw</a>

                            <label style="vertical-align: middle" ng- 
show="false" ng-style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}" 
class="ng-hide"></label>
                            <label style="vertical-align: middle" ng- 
show="false" ng-style="transfer.isDisabled &amp;&amp; {color:'#A6A6A6'}" 
class="ng-hide"></label>
                        </div>
                    </td>
                </tr>

我使用以下 XPath 突出显示屏幕上的撤消按钮

("//tr[td='Merger']//a[@ng-click='executeUndoCommand(transfer)']")

它返回我要求的按钮,但也返回 3 个隐藏按钮,对于我正在运行的测试,我只需要选择显示的按钮。我要求的按钮是下面列表中的第 4 个

 $x("//tr[td='Merger']//a[@ng-click='executeUndoCommand(transfer)']")
(4) [a.btn.btn-primary.btn-sm.ng-hide, a.btn.btn-primary.btn-sm.ng-hide, 
a.btn.btn-primary.btn-sm.ng-hide, a.btn.btn-primary.btn-sm]
0
:
a.btn.btn-primary.btn-sm.ng-hide
1
:
a.btn.btn-primary.btn-sm.ng-hide
2
:
a.btn.btn-primary.btn-sm.ng-hide
3
:
a.btn.btn-primary.btn-sm
length
:
4

我将 xpath 更改为以下内容以尝试选择显示的按钮,但这些都不起作用

$x("//tr[td='Merger']//a[@ng-click='executeUndoCommand(transfer)' and 
@class='btn btn-default btn-sm']")

$x("//tr[td='Merger']//a[@ng-click='executeUndoCommand(transfer)']//a[@ng- 
show='true']")

有人可以建议一种方法来突出显示我需要的按钮吗?

标签: xpath

解决方案


尝试类似的事情

//a[text()='Undo' and not(contains(@class,'hide'))]

推荐阅读