试图找到独特的按钮XPath

时间:2018-04-11 11:26:29

标签: html selenium xpath

我有一个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']

请帮忙!

3 个答案:

答案 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]选择所需内容。