使用Follow-Sibling PYTHON单击表格内的按钮

时间:2016-12-19 16:14:19

标签: python css xpath css-selectors siblings

我有一个4行4列的表。最后两列有两个按钮:开始取消。我想按第二行/最后一列的取消按钮。每行的代码类似...减去我要启动的服务名称。

<table class="table">
    <tbody>
      ---this is the first row---
       <tr ng-repeat="toyService in theService" ng-class="{'text-muted':toyservice.notFound" class="ng-scope">
      --- this is the second row.. the row I am trying to start----
       <tr ng-repeat="toyService in theService" ng-class="{'text-muted':toyservice.notFound" class="ng-scope">
            <td style="text-align:center">...</td>
            <td class="ng-binding"> Toy Service 2 </td>
            <td class="ng-binding">...</td>
            <td class="toy-service-button-panel text-right">
               ----the first button (Start Button)
                <button type="submit" class="btn btn-info">...</button>
                ----the button I am trying the click (Cancel)
                <button type="submit" class="btn btn-success btn-sm"
                     <span title="Cancel Service">..</span>

每一行都有相同的代码减去服务名称:

第1行玩具服务1

第2行玩具服务2

第3行玩具服务3

第4行玩具服务4

我尝试的是:

driver.find_element_by_xpath("//td[contains(text(), 'Toy Service 2')]/follow-sibling::td").find_element_by_css_selector("td[class='toy-service-button-panel.text-right']").find_element_by_css_selector("button[class='btn.btn-success.btn-sm']").click()

我收到错误消息

  

无法执行'evaluate on'文档:字符串   // td [contains(text(),Toy Service 1')] / follow-sibling :: td'不是   有效的XPath表达式。

我尝试了不同的方法,但似乎无法点击第2行的“取消”按钮

1 个答案:

答案 0 :(得分:1)

不是follow-sibling,而是following-sibling

driver.find_element_by_xpath("//td[contains(text(), 'Toy Service 2')]/following-sibling::td")

但是,我不认为您的方法会起作用,因为following-sibling::td会匹配td之后的下一个<td class="ng-binding"> Toy Service 2 </td>元素,后者不包含所需的按钮。

相反,我首先想出你想要使用的tr元素:

row = driver.find_element_by_xpath("//tr[td[contains(., 'Toy Service 2')]]")

然后,我会在这一行内进行操作:

row.find_element_by_css_selector("td.toy-service-button-panel button.btn.btn-success").click()

我还简化了我们的选择器,无需检查完整的class属性值 - 您可以使用点符号检查各个类。