我有一个XPath不唯一的情况,并匹配页面上的3个元素,其基本位置随刷新而变化:
<div class="col-xs-12 Hover">
<button data-testid="continueCheckoutButton" ng-
class="continueDellMetricsClass" ng-click="continueButtonClick()" ng-
disabled="disableContinueButton" class="btn btn-success btn-block
continueButton" data-metrics="" type="button">Checkout</button>
请帮我找到这个按钮元素的唯一XPath或CSS路径。
另外两个HTML如下:
<div class="col-xs-12">
<button data-testid="continueCheckoutButton" ng-
class="continueDellMetricsClass" ng-click="continueButtonClick()" ng-
disabled="disableContinueButton" class="btn btn-success btn-block
continueButton" data-metrics="" type="button" style="background:
rgb(204, 136, 136); border: 2px solid red;">Checkout</button>
<div>
<button ng-class="continueDellMetricsClass" ng-
click="continueButtonClick()" ng-disabled="disableContinueButton"
class="btn btn-success btn-block continueButton" data-
testid="continueCheckoutButton" data-metrics="" type="button"
style="background: rgb(204, 136, 136); border: 2px solid
red;">Checkout</button>
</div>
这导致3个元素匹配:
//button[@data-testid = 'continueCheckoutButton']
请帮忙!
答案 0 :(得分:0)
要点击文本为结帐的按钮,您必须通过 WebDriverWait 进行等待,您可以使用以下任一代码块(Python):
CSS_SELECTOR
:
button.btn.btn-success.btn-block.continueButton[ng-class='continueDellMetricsClass'][data-testid='continueCheckoutButton']
XPATH
:
//button[@class='btn btn-success btn-block continueButton' and contains(.,'Checkout')]
注意:由于元素是 Angular 元素,因此您必须通过各自的 Selenium语言绑定艺术来诱导正确的 WebDriverWait / em>的
根据您更新的 HTML ,您可以使用以下定位器策略:
XPATH
:
//button[@class='btn btn-success btn-block continueButton' and contains(.,'Checkout') and not (@style='background')]
答案 1 :(得分:0)
//div[@class='col-xs-12']/button[@class='btn btn-success btn-block continueButton' and contains(.,'Checkout')]
试试这个。
答案 2 :(得分:0)
要区分目标按钮和其他两个按钮,您可以尝试:
//button[not(@style) and .="Checkout"]
P.S。如果所有节点的HTML看起来都相同,则可以使用所需节点的索引:
(//button[not(@style) and .="Checkout"])[1]
请注意,在XPath索引编制从1
开始,因此第一个节点的索引将为[1]
。
您还可以使用find_elements...()
代替find_element...()
来获取元素列表,并使用[index]
选择所需内容。